为什么函数未在此范围内声明?

时间:2013-05-19 22:41:49

标签: c++

我正在尝试从另一个类中调用构造函数。但不幸的是我收到了这个错误:

  

此范围内未声明Fun2

这是我的代码:

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

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

int main()

}

如何将“消息”发送给另一个类的构造函数?

3 个答案:

答案 0 :(得分:2)

C ++通常从上到下编译。由于在定义它之前尝试使用Fun2,编译器就会抱怨。相反,您可以先简单地定义Fun2课程:

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

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

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

在某些情况下,编译器实际上会在多次传递中解析代码,并且在这些位置可以在使用后声明标识符(例如,成员)。

答案 1 :(得分:2)

如果在Fun1中使用Fun2,必须首先声明Fun2:

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

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

int main()

}

答案 2 :(得分:1)

在定义Fun1时未定义Fun2。

尝试转发声明。

 class Fun2;

 class  Fun 1 {
    ... class definition
 }

 class Fun2 {
   .... class definition
 }