我有这个头文件,zeeheader.h,我在其中编写了一些类,我在将字符串作为参数提供给其中一个函数时遇到了问题:
class DeliTest
{
public:
void DeliCheck(Stack*,string);
void ComCheck (unsigned,string);
bool EofCheck (unsigned,string);
};
当我在cpp文件中实现它时,我添加了#include,它似乎正在工作,例如:因为我正在编写“数据”。我得到了intellisense出现的“length()”,所以我认为它有效,但事实并非如此。我得到的错误如下:
语法错误:标识符'string' 'DeliTest'中找不到重载的成员函数
这是cpp文件中的一个函数:
bool DeliTest::EofCheck(unsigned i, string data)
{
if (i == data.length()-1)
return 1;
return 0;
}
我应该在头文件中添加一些内容吗?
答案 0 :(得分:7)
在头文件中,您需要:
#include <string>
字符串存在于std:;命名空间,所以你的函数应该是这样的:
void DeliCheck(Stack*, std::string);
虽然按值传递字符串并没有错,但正如您所做的那样,通过const引用传递它们是更常见和更好的做法:
void DeliCheck(Stack*, const std::string & );
答案 1 :(得分:3)
请务必#include <string>
,并且由于strings
位于std
命名空间,因此您应在标题中将strings
声明为std::string
。
作为旁注,请确保不在头文件中声明using namespace std;
。这将导致包含此标头的任何其他标头或c / cpp文件也使用std命名空间。这称为污染命名空间。
答案 2 :(得分:1)
您应该#include <string>
并记住字符串是标准库的一部分,因此它位于std命名空间中。您可以在标题的顶部添加:using namespace std;
,也可以使用std::string
完全限定字符串类。你应该养成使用完全限定类名的习惯,特别是在头文件中。
答案 3 :(得分:1)
我假设您正在尝试使用标准字符串类?如果需要,您需要添加:
#include <string>
位于头文件的顶部。然后还使用std::
作为字符串用法的前缀; e.g。
void DeliCheck(Stack*, std::string);
您可能还想为清晰度命名参数,并且您可能不希望按值传递字符串:
void DeliCheck(Stack* s, const std::string& name);