2013-05-19 63 views
0

我想从另一个类中调用构造函数。但不幸的是我得到这个错误:为什么该函数未在此范围内声明?

Fun2 was not declared in this scope

这是我的代码:

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

int main() 

} 

我怎样才能把我的“消息”其他类的构造函数?

回答

2

C++通常是从上到下编译的。由于您在定义之前尝试使用Fun2,因此编译器正在抱怨。相反,你可以简单地先定义你的Fun2类:

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

现在,当编译器看到你使用标识符Fun2,它知道它对应的,因为它已经看到的定义。

有些时候编译器在多个通道,并在这些地方使用它们(会员等)后标识符可以声明实际上解析代码。

1

FUN2是不是你定义FUN1的时间来定义。

尝试着declartion。

class Fun2; 

class Fun 1 { 
    ... class definition 
} 

class Fun2 { 
    .... class definition 
} 
+0

他们不能够创建在'Fun1'了'Fun2'临时对象,如果所有他们是它的一个声明。 –

2

FUN2必须,如果你在FUN1使用它首先声明:

class Fun2 { 
    public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
    public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

int main() 

} 

我只是想获得50点声望评论>。 <

+0

或者你也可以转发声明吧.. –

+0

就像函数原型一样。这是一个设计的事情。 –