【问题标题】:Vector in class (does not have a class type)类中的向量(没有类类型)
【发布时间】:2014-05-23 16:09:20
【问题描述】:

我在课堂上遇到矢量问题。

#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)-&gt;sth::tab' does not have class type 有什么想法吗?

【问题讨论】:

  • vector&lt;int&gt; tab(); 这是函数声明!!你想要vector&lt;int&gt; tab;

标签: c++ class vector


【解决方案1】:

下面其实是一个函数声明:

vector<int> tab();

如果你想声明一个std::vector,它应该是:

vector<int> tab;

【讨论】:

  • 我已经更新了我的答案,您是否同意它完全解释了问题以及可行的解决方法?
【解决方案2】:

这个简单的代码导致
11 5 [Error] '((sth*)this)-&gt;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>();

【讨论】:

  • 最后一部分并不完全准确。您可以在使用 C++11 非静态数据成员初始化程序定义的位置初始化数据成员。在这种情况下,OP 可以使用vector&lt;int&gt; tab{};(或vector&lt;int&gt; tab = vector&lt;int&gt;();),但没有必要。
猜你喜欢
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2012-10-24
相关资源
最近更新 更多