尝试通过引用传递Object时的编译错误

时间:2013-03-04 07:06:39

标签: c++ parameters reference

每次我尝试编译此程序时,都会收到以下错误:

    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);
}

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你需要编译将导致Character.o的Character.cpp,它最终将与你的项目链接,使链接器知道类Character。然后这个链接错误就会消失。