我对C ++向量有一个小问题。 在我的.H文件中我有
class MyClass{
private:
std::vector<myObject> test;
public:
MyClass();
add(myObject object);
}
在我的.CPP文件中
MyClass::MyClass(){
std::vector<myObject> test;
}
MyClass::add(myObject object){
//here is the problem. Netbeans does even giving me quick cast this method i need to write it myself and it throws an error.
test.push_back(object);
}
我正在使用NetBeans 8,它说&#34;无法解析identfier push_back而且我不知道为什么。我对C ++很陌生并做了一些研究,但似乎我无法找到答案。 我的目标是让.H文件和我初始化.CPP中的向量然后我想要单独的函数,如添加将我的对象推送到包含向量的这个类。类似于您可以添加对象的列表。
感谢您的帮助。
编辑: 是的,我在顶部包含了矢量。
编辑: 这就是代码
#include <vector>
class MyClass{
private:
int a;
std::vector<int> test;
public:
MyClass();
void add(int n);
};
MyClass::MyClass(){
}
void MyClass::add(int m){
//unable to resolve identifier push_back
test.push_back(m);
}
int main() {
MyClass a();
//request for member add in a which is of non class type
a.add(1);
}
答案 0 :(得分:2)
您忘记为add
方法添加返回类型。
在H中尝试这个:
void add(myObject object);
这在CPP:
void MyClass::add(myObject object){
答案 1 :(得分:2)
int main() {
MyClass a();
//request for member add in a which is of non class type
a.add(1);
}
//请求成员添加非类型类型
因为a
不是MyClass
对象。为了使它成为一个,你需要像这样构建它:
MyClass a{};
或者只是这样:
MyClass a;
否则将其视为函数声明。这里编译时没有错误https://ideone.com/y7fQXo
答案 2 :(得分:0)
根据您的“完整”代码(不会显示.h
和.cpp
之间的分界线,但是我告诉您代码已完成),很明显#include
代码顶部只有一个.h
。我假设.cpp
代码以行MyClass::MyClass(){
开头,这意味着它没有包含。因此,它没有来自您标头的任何信息,并且通过扩展,没有来自<vector>
的信息。
#include <vector>
中需要 .h
(因为您在类定义中使用了vector
),但 还需要#include "myclass.h"
(在myclass.cpp
中(或者你命名为源文件的任何东西)。或者你命名为头文件的任何东西。
没有它,当编译器正在编译.cpp
文件时,它只是在黑暗中磕磕绊绊。它没有MyClass
整体的定义,因此不知道test
是vector<int>
类型的成员。不知道test
是什么(并且就此而言,不知道vector<int>
是什么),它无法解决任何方法。
要使其工作,您需要在.h
中包含.cpp
,以便编译器具有解释方法定义的声明。如果您的标题名为myclass.h
,请添加:
#include "myclass.h"
到.cpp
的顶部。为了更好地衡量,在源文件中明确#include <vector>
也可能有意义;是的,它会通过包含标题的副作用得到它,但是对于双重包含标准库标题(通过包含保护来防止双重包含)在很大程度上是无害的,并且它清楚地说明了你依赖的标准库组件是什么on(对维护者有用)。