不兼容的函数声明

时间:2011-03-17 13:05:25

标签: c++ parameters

我被困了,为什么我收到错误:声明不兼容...

'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);    
};

3 个答案:

答案 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.
};