Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么是未知类型名“Complejo”?_C++_C++11 - Fatal编程技术网

C++ 为什么是未知类型名“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

这是一个简单的例子

例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+类不能在同一个文件中工作,如果我将文件分开,则可以工作

谢谢

为什么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!我不知道我怎么没有想到这一点非常感谢。