【问题标题】:Compilation error when trying to pass an Object by reference [duplicate]尝试通过引用传递对象时出现编译错误[重复]
【发布时间】:2013-02-18 05:30:00
【问题描述】:

每次我尝试编译这个程序时,都会出现以下错误:

    Undefined symbols for architecture x86_64:
  "Character::setTime(int)", referenced from:
      awesome(Character)    in ccmsAc4F.o
  "Character::getMoney()", referenced from:
      _main in ccmsAc4F.o
  "Character::setMoney(double)", referenced from:
      awesome(Character)    in ccmsAc4F.o
  "Character::Character()", referenced from:
      _main in ccmsAc4F.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

字符编译正确并且没有错误。问题似乎是试图将对象作为参考传递。以下是我的程序:

#include <cstdlib>
#include "Character.h"
#include <iostream>

using namespace std;

void awesome(Character& character);

int main() {
    Character userCharacter;
    awesome(userCharacter);
    cout << userCharacter.getMoney();
    return 0;
}

void awesome(Character& character)
{
    character.setTime(0);
    character.setMoney(0.00);
}

有人知道我做错了什么吗?最终在一个更大的程序中,我想使用引用来编辑一个已经实例化的对象。我假设引用是正确的方法。任何帮助将不胜感激。

【问题讨论】:

  • 你链接 Character.o 了吗?
  • 这些实际上不是编译器错误,它们是链接器错误。看来您没有使用 Character 类的源文件进行构建。

标签: c++ parameters reference


【解决方案1】:

它们是链接器错误。您忘记实现 Character 的方法或将 Character.o 链接到您的项目。

Character::setTime(int) { /* body ?! */ }
Character::getMoney() { /* body ?! */ }
Character::setMoney(double) { /* body ?! */ }
Character::Character() { /* body ?! */ }

【讨论】:

  • 方法完全实现。我不确定您将 Character.o 链接到项目是什么意思。
  • 您是否将 character.cpp 添加到您的项目或 makefile 中?
  • MM,感谢您的帮助。我认为更好的解释方式是您个人将如何正确完成编译和链接该程序的过程。我正在使用 Xcode 进行 C++ 开发,在我的软件构建课程中我们还没有学习过类似的东西。
【解决方案2】:

您需要编译 Character.cpp 生成 Character.o 最终将链接到您的项目,使链接器知道类 Character。然后此链接错误将消失。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多