这是一个简单的例子。
示例1 例如,如果我声明此代码(在同一文件中带有Complejo类):
#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 + class”不能在同一个文件中工作,而如果我分开文件则可以工作?
谢谢!
答案 0 :(得分:4)
在声明类型之前不能使用它。如果您将第一个示例重新排列为
using namespace std;
class Complejo {
//...
};
int main()
{
Complejo com(1,1);
cout << com << endl;
}
它将合规。请注意,#include
所做的只是将标头的内容包含到源文件中。因此,示例2与上述示例大致相同。
答案 1 :(得分:2)
为什么“ main + class”在同一文件中不起作用
因为编译器看到了这一行
Complejo com(1,1);
在您的main
函数中,需要预先查看类型Complejo
的定义。没办法解决-将它放到头文件中并包含它,还是从类顶部的main
函数下面剪切并粘贴类定义都没有关系,两种方法都可以。 / p>