包括一个字符串作为头文件中函数的参数? C ++

时间:2010-04-02 16:09:10

标签: c++

我有这个头文件,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;

}

我应该在头文件中添加一些内容吗?

4 个答案:

答案 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);