测试程序1:
#include <iostream>
#include <afx.h>
using namespace std;
int main(int argc, char** argv)
{
定义空字符串
CString str;
cout<<"Cstring1"<<str<<" Length:"<<5<<endl;
return 0;
}
编译时报错:
Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpmtd.lib(delop.obj)
Debug/CStringTest.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
测试程序2:
#include <iostream.h>
#include <afx.h>
using namespace std;
int main(int argc, char** argv)
{
定义空字符串
CString str;
cout<<"Cstring1"<<str<<" Length:"<<5<<endl;
return 0;
}
编译无错
测试程序3:
#include <iostream.h>
#include <afx.h>
int main(int argc, char** argv)
{
定义空字符串
CString str();
cout<<"Cstring1"<<str<<" Length:"<<5<<endl;
return 0;
}
编译时报错:
error LNK2001: unresolved external symbol "class CString __cdecl str(void)" (?str@@YA?AVCString@@XZ)
Debug/CStringTest.exe : fatal error LNK1120: 1 unresolved externals
测试程序4:
#include <iostream.h>
#include <afx.h>
int main(int argc, char** argv)
{
定义空字符串
CString str(“123456”);
cout<<"Cstring1"<<str<<" Length:"<<5<<endl;
return 0;
}
编译无错
测试程序5:
//#include <iostream.h>
#include <afx.h>
int main(int argc, char** argv)
{
//定义空字符串
CString str();
return 0;
}
编译无错
本人技术水平有限,尚无法解答此问题,希望以后能深入理解
先记录下此问题,待以后研究
先总结几条注意事项:
1、使用CString定义空字符串,尽量使用"CString str;"或“CString str(" ")”,而要避免使用“CString str()”;
这也是习惯写法,在定义其他类对象时也要注意,就像定义一个未初始化的变量一样就可以,最后一种写法虽合乎语法但应避免使用。
2、当编写控制台程序,若用到<afx.h>,同时又需要标准输出时,首先选择<stdio.h>而不是<iostream.h>或<iostream>