gpt4 book ai didi

c++ - 编译器不正确地将文件包含在同一目录中

转载 作者:行者123 更新时间:2023-12-02 08:00:25 25 4
gpt4 key购买 nike

第一次使用堆栈溢出。我正在尝试练习面向对象的抽象和接口(interface)。我一直无法编译程序,我的程序如下。

main.cpp

#include "Spells.h"

#include <iostream>

int main()
{
spell MagicalSpell;
std::cout << "Hello World!\n";
}

法术.h

#pragma once

class spell {
private:
int EnergyCost;
public:
spell();
~spell();
void SpellEffect();

};

拼写.cpp

#include "Spells.h"
#include <iostream>

spell::spell() {
EnergyCost = 0;
}

spell::~spell() {

}

void spell::SpellEffect(){
std::cout << "woosh" << std::endl;
}

每次我尝试编译 main.cpp 时,我都会得到:

g++     main.cpp  -lcrypt -lcs50 -lm -o main
/tmp/ccnXk1TN.o: In function `main':
main.cpp:(.text+0x20): undefined reference to `spell::spell()'
main.cpp:(.text+0x3f): undefined reference to `spell::~spell()'
main.cpp:(.text+0x64): undefined reference to `spell::~spell()'
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'main' failed
make: *** [main] Error 1

以下链接似乎描述了大部分问题。 https://askubuntu.com/questions/902857/error-tmp-ccob6cit-o-in-function-main-example-c-text0x4a那个人似乎正在使用标准库,我想我只是尝试使用同一目录中的单个文件。

我之前在类作业中一起使用过多个文件,但没有遇到这个问题。我仍然可以编译和执行这些文件。我在让文件相互包含方面犯了错误吗?我应该使用不同形式的 gcc 编译命令吗?

最佳答案

您没有将 Spell.cpp 传递给 g++

使用您提供的选项,g++ 将尝试编译其参数中列出的文件并将生成的目标文件链接在一起以生成最终的可执行文件。但是,由于 Spell.cpp 从未被编译,链接器无法找到 spell::spellspell::~spell 的定义。

最简单的解决方法是将所有翻译单元提供给 g++,例如

g++ main.cpp Spell.cpp -o main 

关于c++ - 编译器不正确地将文件包含在同一目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60646214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com