VC++ 新建MFC中如何对 自己定义的成员函数进行申明和定义?

2025-05-22 12:50:33
推荐回答(1个)
回答1:

VC++ 2008中可以运行的代码:
------------------------------------------------------
#pragma warning(disable:4786)
#include
#include
using namespace std;

#include
#include
using namespace std;

#include
using namespace std;

struct Data
{
string name;
int age;
string work;
double account;
}

int main()
{
//打开输入文件并测试是否成功
string inputfilename;
cout << "Enter inputfilename for output: " << endl;
cin >> inputfilename;

ifstream lastins( inputfilename.c_str(), ios::in );

if ( !lastins )
{
cerr<< "*** ERROR: Cannot open for input. "<return EXIT_FAILURE;
}

int Originallinecount = 2000;

//分配内存空间
Data* d = new Data[ Originallinecount ];

char middlestring[ 100 ];

//从文件中提取数据并放到自定义的结构数组中
if ( !lastins.eof() )
{
for ( int i = 0; i < Originallinecount; i++ )
{
lastins.get( middlestring, 100, '|' );
middlestring[ 99 ] = '\0';
d[ i ].name = middlestring;
lastins.ignore( 1, '|' );
......等等,均为数据提取
}
}

lastins.close();

//调用结构数组的数据...
{
}

delete[] d;

return 0;
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
在MFC中,我把上面的代码改为一个函数,代码如下:
-------------------------------------------------------------
在CView.h中加入:
------------------------------
#include
using namespace std;

struct Data
{
string name;
int age;
string work;
double account;
}

// 提取文本文件的数据,并返回结构数组
Data* MakeDataArray(string inputfilename, int Originallinecount );

--------------------------------------------------------------------------------------------
在CView.cpp中加入:(注:已经在出错的位置注上错误原因)
---------------------------------------------------------

#include
using std::ifstream;

#include
using namespace std;

// 提取文本文件的数据,并返回结构数组
Data* CView::MakeDataArray(string inputfilename, int Originallinecount ) //错误1:error C2143: 语法错误 : 缺少“;”(在“*”的前面)
//错误2:error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

{ //错误3: error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
//错误4:error C2556: “int *CView::MakeDataArray(std::string,int)”: 重载函数与“CView::Data *CView::MakeDataArray(std::string,int)”只是在返回类型上不同
//错误5: error C2371: “CView::MakeDataArray”: 重定义;

//打开输入文件并测试是否成功
ifstream lastins( inputfilename.c_str(), ios::in );

if ( !lastins )
{
MessageBox( _T( "ERROR: Can not open the file"));
}

//分配内存空间
Data* d = new Data[ Originallinecount ];

char middlestring[ 100 ];

//从文件中提取数据并放到自定义的结构数组中
if ( !lastins.eof() )
{
for ( int i = 0; i < Originallinecount; i++ )
{
lastins.get( middlestring, 100, '|' );
middlestring[ 99 ] = '\0';
d[ i ].name = middlestring;
lastins.ignore( 1, '|' );
......等等,均为数据提取
}
}

lastins.close();

return *d;
}

void CView::RenderScene(void)
{
Data* datum = MakeDataArray( inputfilename, Originallinecount ); //inputfilename是在控件中加入

//数据处理...
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
问题:2,如果换成引用又如何?

我将Data* CView::MakeDataArray(string inputfilename, int Originallinecount )
-----------------------------------------------------------------------------------
在 CView.h:改为:
-----------------------------------------
void MakeDataArray(string inputfilename, int Originallinecount, Data &dataRef )

----------------------------------------------------
在CView.cpp中:
-----------------------
void CView::MakeDataArray(string inputfilename, int Originallinecount, Data &dataRef )
{
//代码同上,只去除 “return *d;”而加上:

&dataRef = d; //错误1:error C2106: “=”: 左操作数必须为左值
}

void CView::RenderScene(void)
{
Data datum;
MakeDataArray( inputfilename, Originallinecount ); //inputfilename是在控件中加入

//数据处理...
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\