C++ 为什么是未知类型名“Complejo”?
这是一个简单的例子 例1 例如,如果我在同一个文件中用Complejo类声明此代码:C++ 为什么是未知类型名“Complejo”?,c++,c++11,C++,C++11,这是一个简单的例子 例1 例如,如果我在同一个文件中用Complejo类声明此代码: #include <iostream> #include <string> using namespace std; int main() { Complejo com(1,1); cout << com << endl; } class Complejo { private: double real; double imaginari
#include <iostream>
#include <string>
using namespace std;
int main()
{
Complejo com(1,1);
cout << com << endl;
}
class Complejo
{
private:
double real;
double imaginario;
public:
//Complejo();
Complejo(double real, double imaginario)
{
real = 1;
imaginario = 2;
}
double getReal() { return real; }
double getImaginario() { return imaginario; }
};
ostream &operator<<(ostream &stream, Complejo& comp)
{
stream << comp.getReal() << " + " << comp.getReal()<< endl;
return stream;
}
我的编译器告诉我:
sobrecarga_ostream.cpp:15:3:错误:未知类型名称“Complejo”
例2
但如果我创建sobrecarga_ostream.cpp:
#include <iostream>
#include <string>
#include "Complejo.h"
using namespace std;
int main()
{
Complejo com(1,1);
cout << com << endl;
}
和Complejo.h:
#include <iostream>
using namespace std;
class Complejo
{
private:
double real;
double imaginario;
public:
//Complejo();
Complejo(double real, double imaginario)
{
real = 1;
imaginario = 2;
}
double getReal() { return real; }
double getImaginario() { return imaginario; }
};
ostream &operator<<(ostream &stream, Complejo& comp)
{
stream << comp.getReal() << " + " << comp.getReal()<< endl;
return stream;
}
然后,它工作得很好
为什么main+类不能在同一个文件中工作,如果我将文件分开,则可以工作
谢谢
为什么main+类不能在同一个文件中工作
因为当编译器看到行时
Complejo com(1,1);
在主要函数中,它需要事先了解Complejo类型的定义。没有办法解决这个问题-无论您是将其放入头文件并包含该头文件,还是从主函数的下面剪切并粘贴类定义到它的上面,都无关紧要,这两种方法都有效。在声明类型之前,您不能使用该类型。如果您将第一个示例重新排列为
using namespace std;
class Complejo {
//...
};
int main()
{
Complejo com(1,1);
cout << com << endl;
}
这将是谎言。请注意,include只不过是将头的内容包含到源文件中。因此,您的示例2与上面的示例大致相同
PS:请阅读。Wow men!我不知道我怎么没有想到这一点非常感谢。