C ++中的函数的向量返回类型抛出错误

时间:2018-10-30 19:05:54

标签: c++

我在C ++中构建了一个简单的split函数,该函数将使用定界符分割字符串。我将函数放在GP.cpp中,并在GP.h中声明了该函数。

GP.cpp:

#include "GP.h"

#include <vector>
#include <string>

using namespace std;

vector<string> GP::split(string text, string delimiter) {
    vector<string> result;
    size_t pos;
    string token;
    while( (pos = text.find(delimiter)) != string::npos ) {
        token = text.substr(0, pos);
        result.push_back(token);
        text.erase(0, pos + delimiter.length());
    }
    return result;
}

GP.h:

#ifndef GP
#define GP

#include <vector>
#include <string>

using namespace std;

class GP {

    public:
        static vector<string> split(string text, string delimiter);

};

#endif

我的编辑器将在cpp文件的vector<string>处进行以下注释: explicit type is missing ('int' assumed)

当我尝试构建时,出现此错误: 'split': is not a member of 'std::vector<std::string,std::allocator<_Ty>>'

2 个答案:

答案 0 :(得分:5)

#define GP意味着程序中的令牌GP将被替换为空白。因此,这将转换代码:

class GP {

进入

class {

以及其他导致您出错的情况。

要解决此问题,请让您的包含卫兵使用不太可能与程序中其他令牌冲突的令牌。

using namespace std;放在标头中也是一种不好的做法,因为其他使用标头的人都无法撤消它。最好在标头中使用std::限定。

答案 1 :(得分:3)

展示一个在现代C ++代码中未使用#ifdef卫队的人。这就是#pragma once的目的。

您将GP定义为空字符串,因此标题实际上是这样的:

#include <vector>
#include <string>

using namespace std;

class  {

    public:
        static vector<string> split(string text, string delimiter);

};

我希望现在显而易见的是问题所在。