首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数声明不兼容

函数声明不兼容
EN

Stack Overflow用户
提问于 2011-03-17 21:05:25
回答 3查看 24.4K关注 0票数 1

我卡住了,为什么我会收到一个错误:声明不兼容...

‘'void::function ( int,int,std::vector<_Ty> *)’:在'A‘中找不到重载的成员函数错误向量:语法错误:标识符’C2061‘1> with 1> 1> _Ty=Point 1>

代码语言:javascript
复制
//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);    
};
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-17 21:08:50

这是因为函数的头部应该完全相同。

代码语言:javascript
复制
//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);     
}; 

或者:

代码语言:javascript
复制
//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);     
}; 

但是,在第一种情况下调用函数时,如果传递对象,则应将*替换为&,以便本地指针将获得传递的对象的地址。或者手动传递一个指针。

票数 3
EN

Stack Overflow用户

发布于 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

票数 4
EN

Stack Overflow用户

发布于 2011-03-17 21:09:50

首先,在B的末尾缺少一个分号。此外,您使用的是Class而不是class

对于签名本身,您的声明(在头文件中)接受一个指向vector的指针,而您的定义(在.cpp文件中)接受一个引用。

代码语言:javascript
复制
//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.
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5339395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档