【问题标题】:Incompatible function declaration不兼容的函数声明
【发布时间】:2023-03-12 07:20:01
【问题描述】:

我卡住了,为什么会报错:声明不兼容...

'void A::function(int,int,std::vector<_ty> *)' : 在'A'中找不到重载的成员函数 错误 C2061:语法错误:标识符“向量” 1> 与 1> [ 1> _Ty=点 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);    
};

【问题讨论】:

  • 调用现在和原型一样但是还是有错误
  • 你能在 cpp 文件中发布A::function decleration 吗?为什么那里有 B 级?
  • 编辑:函数受保护
  • 添加#include &lt;vector&gt;
  • 如 sad_man 所说,将 #include &lt;vector&gt; 然后 using namespace std; 添加到头文件中。也可能你在某个地方写了void A::function(int,int,std::vector&lt;_Ty&gt; *) 而不是void A::function(int,int,std::vector&lt;B&gt; *)

标签: c++ parameters


【解决方案1】:

问题!!!!

void function(int a, int b, vector&lt;B&gt; *line);void function(int a, int b, vector&lt;B&gt; &amp; line); 是两个不同的签名(函数原型)。

更重要的是,C++ 中没有 Class 这样的关键字。

【讨论】:

  • 如果不是因为那个愚蠢的验证码,我会是第一个。
【解决方案2】:

这是因为函数的头部应该完全一样。

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

但是,在第一种情况下调用函数时,如果传递一个对象,则应该将*替换为&amp;,这样本地指针就会得到传递对象的地址。或者手动传递一个指针。

【讨论】:

    【解决方案3】:

    好吧,首先,您在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.
    };
    

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 2012-03-13
      • 2016-01-11
      • 2013-12-28
      • 2010-11-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多