C++ 是否将字符串作为参数包含在头文件中的函数中?c++;

C++ 是否将字符串作为参数包含在头文件中的函数中?c++;,c++,C++,我有一个头文件,zeeheader.h,我在其中写了一些类,我在给一个函数指定一个字符串作为参数时遇到了问题: class DeliTest { public: void DeliCheck(Stack*,string); void ComCheck (unsigned,string); bool EofCheck (unsigned,string); }; 当我在cpp文件中实现它时,我向它添加了#include,它似乎在工作,例如:当我编写“数据”时,我得到了i

我有一个头文件,zeeheader.h,我在其中写了一些类,我在给一个函数指定一个字符串作为参数时遇到了问题:

class DeliTest
{

public:

    void DeliCheck(Stack*,string);
    void ComCheck (unsigned,string);
    bool EofCheck (unsigned,string);
};
当我在cpp文件中实现它时,我向它添加了#include,它似乎在工作,例如:当我编写“数据”时,我得到了intellisense显示的“length()”,因此我认为它在工作,但它没有。我犯了如下错误:

语法错误:标识符“字符串” 在“Deliest”中未找到重载成员函数

这是cpp文件中的函数之一:

bool DeliTest::EofCheck(unsigned i, string data)
{

    if (i == data.length()-1)
        return 1;
    return 0;

}

我是否应该向头文件中添加一些内容?

您应该
#包括
,并记住字符串是标准库的一部分,因此它位于std名称空间中。您可以添加:
使用名称空间std
位于标题顶部,或者在使用字符串类的位置使用
std::string
完全限定字符串类。您确实应该养成使用完全限定类名的习惯,尤其是在头文件中。

在头文件中,您需要:

#include <string>
虽然按值传递字符串并没有错,但按常量引用传递字符串是更常见和更好的做法:

void DeliCheck(Stack*, const std::string & );

我假设您正在尝试使用标准字符串类?如果是,您需要添加:

#包括

在头文件的顶部。然后在字符串的用法前面加上
std::
;e、 g

无效检查(堆栈*,标准::字符串)

为了清晰起见,您可能还希望命名参数,并且可能不希望按值传递字符串:

void DeliCheck(堆栈*s,常量std::字符串和名称)

确保
#包括
,并且由于
字符串
位于
std
命名空间中,您应该在标题中将
字符串
声明为
std::string


作为旁注,请确保不要使用名称空间std声明
在头文件中。这将导致包含此标头的任何其他标头或c/cpp文件也使用std命名空间。这被称为污染名称空间。

-1,用于建议在头文件中添加“使用名称空间std;”。可以在.cpp源文件中飞行,但在头文件中不合适。该死,我的投票限制被超过了。使用名称空间xxx放置
不是一个好主意在头文件中。我说这是一个选项。我想我应该说这是一个糟糕的选择。@Neil,如果我还有票,我会投你一票。回答得很好。谢谢大家的快速回复和提示:)问题解决了!请确保单击最佳答案左侧的复选标记,以指示问题已解决。嗯,我是否也要在头文件中命名参数?因为我认为在CPP文件中命名它们是足够的了。在头文件中命名参数是可选的,但是提供参数的描述是有用的。Nara,考虑读取头文件并找到这样的函数:<代码>无效FO(char,char *,char *);
是否希望查看参数名称以了解如何使用函数?
void DeliCheck(Stack*, const std::string & );