报错代码
写一个类,为了方便把测试用的main函数写在同一个文件中。
#ifndef _STRING_H
#define _STRING_H
#include<vector>
#include<iostream>
using namespace std;
class myStr{
vector<char> data;
public:
myStr(const char* s=NULL){
for (;s&&*s;++s) data.push_back(*s);
}
friend std::ostream& operator<<(std::ostream& out,const myStr& x){
for (auto c: x.data) out << c;
return out;
}
};
int main(){
myStr a = "Hello World";
cout << a;
return 0;
}
#endif
报错
报错信息很长,以下截取一部分:
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\cwchar:179:11: error: ‘::wcscat’ has not been declared
179 | using ::wcscat;
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\cwchar:180:11: error: ‘::wcscmp’ has not been declared
180 | using ::wcscmp;
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\cwchar:181:11: error: ‘::wcscoll’ has not been declared
181 | using ::wcscoll;
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\cwchar:182:11: error: ‘::wcscpy’ has not been declared
182 | using ::wcscpy;
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\cwchar:183:11: error: ‘::wcscspn’ has not been declared
183 | using ::wcscspn;
…
c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\bits\char_traits.h:444:9: error: ‘wcslen’ was not declared in this scope
444 | return wcslen(__s);
原因
#define 的名称和C++自带的重复
解决方案
修改#define的名称,例如改为:
#ifndef _STRING_H__
#define _STRING_H__
/*...*/
#endif
成功运行