如果使用#include with header,则类不起作用

时间:2017-04-30 11:33:40

标签: c++

我试图在main函数中使用我的类来挂钩

#include "Square/Square.h"

但如果我这样做,我就有错误

  

架构x86_64的未定义符号:

     

“广场:: calculateSquare()”,    _main in main-cac286.o

     

“Square :: Square(double)”,引自:         _main in main-cac286.o

     

“Square :: ~Square()”,引自:         _main in main-cac286.o

     

“Square :: calculateSquare()”,引自:         _main in main-cac286.o

     

“Square :: Square(int)”,引自:         _main in main-cac286.o

     

“Square :: ~Square()”,引自:         _main in main-cac286.o

但如果我使用#include Square/Square.cpp,那么所有作品都是完美的

1 个答案:

答案 0 :(得分:1)

此代码

#include "Square/Square.h"

表示代码中该点的文件“Square / Square.h”的内容包含 。该行被该文件的整个内容替换。

诸如“Square / Square.h”之类的文件 - 头文件 - 通常用于声明事物 - 这是一种说法如何 它是如何工作的。头文件通常不提供什么,这是定义,显然在这种情况下是正方形。

你有没有去过国际旅行?好吧,当你进入一个国家时,你可能需要填写海关声明 - 声明你有其他声明本身并不是它本身 - 它只是说你拥有那个东西。这通常是头文件的作用 - 它声明实际存在于其他地方的东西。

因此,您收到以下错误消息:

Undefined symbols for architecture x86_64:

"Square::calculateSquare()", _main in main-cac286.o

"Square::Square(double)", referenced from: _main in main-cac286.o

"Square::~Square()", referenced from: _main in main-cac286.o

"Square::calculateSquare()", referenced from: _main in main-cac286.o

"Square::Square(int)", referenced from: _main in main-cac286.o

"Square::~Square()", referenced from: _main in main-cac286.o

因为已编译的可执行文件没有可用的东西 - 头文件只声明它,它没有定义提供

  

但如果我使用#include Square/Square.cpp,那么所有作品都是完美的

因为该文件定义了 - 在这种情况下“square”的定义

正如其他人所说,出于很多原因,你不应该#include Square/Square.cpp

最简单的解决方案是一次编译(全部)*.cpp个文件。使用g++,您可以执行以下操作:

g++ main.cpp Square/Square.cpp -o myprogram