gpt4 book ai didi

c++ - 我的 makefile 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:46 26 4
gpt4 key购买 nike

我是 C++ 的新手,从 Java 切换到我正在上大学的类(class)。在我们的第一个任务中,我们必须为我们的代码编写几个 makefile。我的第一个 makefile 不工作——它总是提示“TempControlTest 中的错误:对‘BangBangControl::XXXX’的 undefined reference ,其中 XXXX 是 BangBangControl 中的一个函数(我在 BangBangControl 中的每个函数都出错)。我一直在寻找在网上,所有的 makefile 示例看起来都略有不同,所以我不知道我做错了什么。我会在下面发布我的所有代码,如果有人能给我一点帮助,那就太棒了。另外,这个今晚到期,所以非常感谢任何快速帮助。如果你还在这里,非常感谢!

HeatingUnit.h:

#ifndef HEATINGUNIT_H
#define HEATINGUNIT_H

class HeatingUnit {

private:
bool on;
int temp;

public:
HeatingUnit(bool o, int t);
void turnOn();
void turnOff();
int tick();
};

#endif

HeatingUnit.cpp:

#include "HeatingUnit.h"

HeatingUnit::HeatingUnit(bool o, int t) {
on = o;
temp = t;
}

void HeatingUnit::turnOn() {
on = true;
}

void HeatingUnit::turnOff() {
on = false;
}

int HeatingUnit::tick() {
if(on) return ++temp + 1;
else return --temp;
}

BangBangControl.h:

#ifndef BANGBANGCONTROL_H
#define BANGBANGCONTROL_H

#include "HeatingUnit.h"

class BangBangControl {

private:
int tempToKeep;
HeatingUnit unit;

public:
BangBangControl(int ttk, bool on, int initTemp);
void setTemp(int t);
int getTemp();
void update();
};

#endif

BangBangControl.cpp:

#include "HeatingUnit.h"
#include "BangBangControl.h"

BangBangControl::BangBangControl(int ttk, bool on, int initTemp)
: unit(on, initTemp) {
tempToKeep = ttk;
}

void BangBangControl::setTemp(int t) {
tempToKeep = t;
}

int BangBangControl::getTemp() {
return tempToKeep;
}

void BangBangControl::update() {
int currentTemp = unit.tick();
if(currentTemp > tempToKeep + 2) unit.turnOff();

else if(currentTemp < tempToKeep - 2) unit.turnOn();
}

TempControlTest.cpp:

include <iostream>
#include "BangBangControl.h"
using namespace std;

int main() {
BangBangControl bang(100, false, 60);
for(int i = 0; i < 50; i++) {
bang.update();
cout << bang.getTemp() << " ";
if(i % 10 == 9) cout << endl;
}
}

最后,Makefile_Executable:

all: TempControlTest

TempControlTest: TempControlTest.cpp BangBangControl.o
g++ -o TempControlTest TempControlTest.cpp

BangBangControl.o: BangBangControl.cpp HeatingUnit.o
g++ -c BangBangControl.cpp

HeatingUnit.o: HeatingUnit.cpp
g++ -c HeatingUnit.cpp

clean:
rm -rf *.o TempControlTest

再次感谢您!

最佳答案

您没有您的对象连接在一起。

你有两行编译 BangBangControl.cppHeatingUnit.cpp 到两个 .o 文件(尽管我怀疑您是否需要让 BangBangControl.o 依赖于 HeatingUnit.o)。但是您需要将它们一起放入最终的可执行文件中(这称为“链接”)。

TempControlTest: TempControlTest.cpp BangBangControl.o HeatingUnit.o
g++ -o TempControlTest TempControlTest.cpp HeatingUnit.o BangBangControl.o

在上面的行中,TempControlTest.cpp 将被编译,然后与它似乎依赖的两个已编译对象链接在一起成为一个可执行文件。

注意:当您收到“ undefined reference ”错误时,这通常意味着您的代码可以正常编译,但缺少需要链接的符号。

NB2:您的 makefile 规则不会导致 cpp 文件依赖于它们使用的 header 。这意味着当您更改 header 并运行“make”时,make 会告诉您所有内容都已构建。这很糟糕。

关于c++ - 我的 makefile 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123269/

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