我卡住了,为什么我会收到一个错误:声明不兼容...
‘'void::function ( int,int,std::vector<_Ty> *)’:在'A‘中找不到重载的成员函数错误向量:语法错误:标识符’C2061‘1> with 1> 1> _Ty=Point 1>
//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);
};
发布于 2011-03-17 21:08:50
这是因为函数的头部应该完全相同。
//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);
};
但是,在第一种情况下调用函数时,如果传递对象,则应将*
替换为&
,以便本地指针将获得传递的对象的地址。或者手动传递一个指针。
发布于 2011-03-17 21:07:14
问题!
void function(int a, int b, vector<B> *line);
和void function(int a, int b, vector<B> & line);
是两个不同的签名(函数原型)。
更重要的是,C++中没有这样的关键字Class
。
发布于 2011-03-17 21:09:50
首先,在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.
};
https://stackoverflow.com/questions/5339395
复制相似问题