我有三个短文件,我从我的项目改编而来,因为它们重现了我所遇到的错误:
exp.cpp
#include <iostream>
using namespace std;
int main(){
cout << "Hello world!" << endl;
}
parser.cpp
#include <cstring>
#include "parser.h"
parser.h
#ifndef PARSER_H_
#define PARSER_H_
#include <cstring>
class Parser{
public:
Parser(std::string*);
std::string* unprocessedInput;
};
#endif /* PARSER_H_ */
当我在线上构建项目时,
Parser(std::string*)
我在'*'令牌&#34;之前收到错误消息&#34;期望')'在线,
std::string* unprocessedInput;,
我收到错误&#34;命名空间'std'中的'string'没有命名类型&#34;。
当我使用&lt; string&gt;时而不是&lt; cstring&gt;在parser.cpp或parser.h中,项目构建。我想了解为什么&lt; cstring&gt;不管用。我需要在项目中使用以null结尾的字符串。
请注意,我已经广泛搜索了这个。在我的研究中,我得到了在头文件中使用std :: string而不是字符串的想法。
答案 0 :(得分:4)
标头<cstring>
包含C标头<string.h>
的标准C声明
C ++标头<string>
包含C ++标准类std::string
(std :: basic_string)的声明
因此<cstring>
和<string>
是不同的标头,包含不同的声明。
根据C ++标准(相对于标题<cstring>
)
7内容与标准C库标题相同
<string.h>
,更改为21.8中指定的memchr()。