2016-06-08 93 views
2

我具有低于在C情景++开发的C++无法从dericed类参数在C++调用基类构造

class base{ 
    int i=0; 
    public: 
     base(){ 
      cout<<"base default constructor"<<endl; 
     } 
     base(int i){ 
      cout<<"base with int"<<endl; 
     } 
}; 

class derive : public base{ 
    int j; 
    public: 
     derive(){ 
      cout<<"derive default"; 
     } 
     derive(int i){ 
      int k=5; 
      base(k);//////error 
      cout<<"derived with int "<<i<<endl; 
     } 
     void fun(int i){ 
      cout<<"finction "<<i<<endl; 
     } 
}; 
int main() 
{ 
    derive d(9); 

} 

内运行以下错误即将后
[错误]冲突的声明“基K”
[错误]'k'以前的声明为'int k'
为什么会出现此错误。
它的工作很好,当我调用基地(5)除了派生的构造函数中声明的任何参数。
在此先感谢。

+0

“DEV C++”不是编译器。 – DeiDei

+0

嗨,是它的临时,我不初始化构造函数。但我想知道为什么base(5)或base(j)在derived()而不是base(i)内工作。 – Ryuk

回答

-1

main()

base b(3); 
    derive d(9); 
    base b1(2); 

//创建显式对象并传递整数参数,然后尝试 也传递部分在derive-> base中的整数值。 中汲取

base(8); 

而且总是打印古怪程序中的变量作用的价值

0
#include <iostream> 

using namespace std; 

class base{ 
public: 
    base(){ 
     cout<<"base default constructor"<<endl; 
    } 
    base(int i){ 
     cout<<"base with int "<<i<<endl; 
    } 
}; 

class derive : public base{ 

public: 
    int j; 
    int k; 
    derive(){ 
     cout<<"derive default\n"; 
    } 
    derive(int i){ 
     k=5; 
     base(this->k);//////error 
     cout<<"derived with int "<<i<<endl; 
    } 
    void fun(int i){ 
     cout<<"finction "<<i<<endl; 
    } 
}; 
int main() 
{ 
    derive p(10); 


} 
+0

请解释一下这个答案。代码只有答案大多没有太大的价值。谢谢你!保持良好的工作! –

0

有什么base(k)可能有两种解释:

  1. 它可能是在临时创建
  2. 它可能是一个变量声明:变量名可以在括号内

在这两种选择中,编译器使用第二种选择:如果某物可以是声明或表达式,则选择该声明。这与most vexing parse有关,虽然不是这样。其效果是,在您使用base(k);试图定义一个名为k类型base的变量。

您可以使用歧义的

一个
  1. (base(k));
  2. base{k};

如果base也有一个构造函数服用std::initializer_list<int>这两个可以具有不同的含义的含义。

相关问题