我试图在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
,那么所有作品都是完美的
答案 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