gpt4 book ai didi

c++ - 对构造函数和析构函数的 undefined reference C++

转载 作者:行者123 更新时间:2023-11-30 04:05:39 25 4
gpt4 key购买 nike

我得到的错误是这样的:

||=== Build: Debug in Building Sim (compiler: GNU GCC Compiler) ===|
obj/Debug/main.o||In function `__static_initialization_and_destruction_0':|
/home/josh/Documents/cpp/building_sim/main.cpp|15|undefined reference to `User::~User()'|
/home/josh/Documents/cpp/building_sim/main.cpp|20|undefined reference to `User::~User()'|
/home/josh/Documents/cpp/building_sim/main.cpp|20|undefined reference to `Building::~Building()'|
/home/josh/Documents/cpp/building_sim/main.cpp|20|undefined reference to `User::~User()'|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

几天来我一直遇到这个错误,并且看到有 14-18 个线程对这个问题有答案,但对我来说毫无用处。此时我的项目由五个文件组成:

main.cpp
user.hpp
user.cpp
building.hpp
building.cpp

main.cpp 链接 building.hpp 和 user.hpp,building 和 user.cpp 链接各自的头文件,building.cpp 链接 user.hpp。

我已经尝试用两种不同的方式多次构建这个项目。我创建了一个 shell 脚本来将所有三个 cpp 文件构建为 .o 文件,然后加入它们(以所有可能的顺序),我尝试了所有可能的简单 g++ main.cpp building.cpp user.cpp命令,我创建了一个 Code::Blocks 项目来手动将所有文件链接在一起。我所有的头文件都包含守卫,但我认为这不是问题。

我的文件全文如下。

主要.cpp

#include <stdio.h>
#include "building.hpp"
#include "user.hpp"

// TODO Text parsing
// TODO Resources
// TODO Generations

using namespace std;

//----------------------------------
// Variables
//----------------------------------
//-----User------
User user(1000);

//---Buildings---
int numBuildings = 0;

Building building1(user, 10, 14, "George");
Building buildings[] = {building1};

int main(){

return 0;
}

用户.hpp

#include <stdio.h>

#ifndef user_h
#define user_h

class User{
public:
User();
~User();

User(int _money);

int getMoney();
void setMoney(int _money);

int getBuildings();
void setBuildings(int _buildings);

private:
int money;
int buildings;
};

#endif

用户.cpp

#include "user.hpp"

User::User(){
User::money = 1000;
User::buildings = 0;
}

User::User(int _money){
User::money = _money;
setBuildings(getBuildings()+1);
}

int User::getMoney(){
return User::money;
}

void User::setMoney(int _money){
User::money = _money;
}

int User::getBuildings(){
return User::buildings;
}

void User::setBuildings(int _buildings){
User::buildings = _buildings;
}

建筑.hpp

#include <iostream>
#include <string>
#include "user.hpp"

#ifndef building_h
#define building_h

class Building{
public:
Building();
~Building();

Building(User user);
Building(User user, int _cost, int _payout);
Building(User user, int _cost, int _payout, std::string _name);

int getCost();
int getPayout();

private:
int cost;
int payout;
std::string name;
};

#endif

建筑.cpp

#include "building.hpp"

Building::Building(){
std::cout << "\n[ERROR] Default constructor used, no building created.\n";
}

Building::Building(User user){
Building::cost = 10;
Building::payout = 20;
Building::name = "Generic";
user.setBuildings(user.getBuildings()+1);
}

Building::Building(User user, int _cost, int _payout){
Building::cost = _cost;
Building::payout = _payout;
Building::name = "Generic";
user.setBuildings(user.getBuildings()+1);
}

Building::Building(User user, int _cost, int _payout, std::string _name){
Building::cost = _cost;
Building::payout = _payout;
Building::name = _name;
user.setBuildings(user.getBuildings()+1);
}

int Building::getCost(){
return Building::cost;
}

int Building::getPayout(){
return Building::payout;
}

最佳答案

您只是忘记了在相应的 cpp 模块中定义两个析构函数:User 和 Building。

关于c++ - 对构造函数和析构函数的 undefined reference C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206486/

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