我在课堂上遇到了一些麻烦。
#include <vector>
using namespace std;
class sth {
vector<int> tab();
public:
void add(int i);
};
void sth::add(int i){
tab.push_back(i);
}
int main() {
sth a;
a.add(10);
return 0;
}
这个简单的代码会导致11 5 [Error] '((sth*)this)->sth::tab' does not have class type
有什么想法发生了什么?
答案 0 :(得分:6)
以下实际上是一个函数声明:
vector<int> tab();
如果您要申报std::vector
,则应为:
vector<int> tab;
答案 1 :(得分:1)
这个简单的代码导致了
11 5 [Error] '((sth*)this)->sth::tab' does not have class type
有什么想法发生了什么?
您使用的是类成员函数声明:
vector<int> tab();
我可以从您的add()
方法实现中读取,您想要声明(并初始化?)类成员变量 。为此,声明语法如下所示:
vector<int> tab;
要初始化类成员变量(甚至使用它们的默认构造函数),必须使用构造函数方法成员初始化列表来定义
sth::sth() : tab() {}
对于当前的c ++标准,您还可以使用以下形式之一直接初始化
vector<int> tab{};
vector<int> tab{1,2,3,4,5};
vector<int> tab = vector<int>();