我被困了,为什么我收到错误:声明不兼容...
'void A :: function(int,int,std :: vector< _Ty> *)':在'A'中找不到重载的成员函数 错误C2061:语法错误:标识符'vector' 1 GT;同 1 GT; [ 1 GT; _Ty =点 1 GT; ]
//cpp file
void A::function(int a, int b, vector<B> *p)
{
}
//header file
class B
{
public:
int q;
};
class A
{
public:
void function(int a, int b, vector<B> *p);
};
答案 0 :(得分:4)
问题!!!!
void function(int a, int b, vector<B> *line);
和void function(int a, int b, vector<B> & line);
是两个不同的签名(函数原型)。
更重要的是,C ++中没有这样的关键字Class
。
答案 1 :(得分:3)
我是因为函数的标题应该完全相同。
//cpp file
void A::function(int a, int b, vector<B>* c) { }
//header file
Class B { public: int q; }
class A {
public:
void function(int a, int b, vector<B> *line);
};
或:
//cpp file
void A::function(int a, int b, vector<B>& c) { }
//header file
Class B { public: int q; }
class A {
public:
void function(int a, int b, vector<B> &line);
};
但是,在第一种情况下调用函数时,如果传递一个对象,则应该用*
替换&
,因此本地指针将获取传递的对象的地址。或者手动传递指针。
答案 2 :(得分:1)
嗯,首先,你在B
结束时错过了一个分号。此外,您使用的是Class
,而不是class
。
对于签名本身,当您的定义(在vector
文件中)引用时,您的声明(在头文件中)会指向.cpp
。
//cpp file
void A::function(int a, int b, vector<B>& c) // // Arguments are an int, an int, and a vector<B> reference.
{
}
//header file
class B
{
public:
int q;
};
class A
{
public:
void function(int a, int b, vector<B>& line);
// Same arguments.
};