【问题标题】:Simple class usage+undefined reference简单的类用法+未定义的引用
【发布时间】:2013-12-18 09:38:10
【问题描述】:

我刚刚创建了这个简单的类。当我编译时,我收到以下错误。

caller.o: 在函数main': caller.cpp:(.text+0x15): undefined reference toReader::Reader(int)' collect2: ld 返回 1 个退出状态

阅读器.h

#ifndef READER_H
#define READER_H
class Reader
{
 private:
  int m_month;
  Reader() {}
 public:
  Reader(int month);
 void SetDate(int month);
 int GetMonth() {return m_month;}
 };
 #endif

Reader.cpp

#include "Reader.h"
Reader::Reader(int month);
{
  SetDate(month);
}
void Reader::SetDate(int month)
{
  m_month=month;
}

主程序

#include <iostream>
 using namespace std;
#include "Reader.h"
int main()
{ int i;
  i=5;
  Reader rd(i);
  i=rd.GetMonth();
  cout<<i;
  return 0;
 }

【问题讨论】:

  • 是链接器错误吗? (确保您的 IDE 包含所有 cpp 文件并标记为要编译。)

标签: c++


【解决方案1】:

您需要将所有源文件编译成目标文件,然后将目标文件链接在一起以生成程序。

这可以一步完成:

gcc Reader.cpp main.cpp

或者分两个单独的步骤:

gcc -c Reader.cpp main.cpp
gcc Reader.o main.o

当然,您通常应该有一个 IDE、Makefile 或构建系统生成器(例如 CMake)来为您处理这些。

【讨论】:

  • 当我编译我的文件时,它正在创建一个可能是我的另一个 C 项目 exe 文件的 a.out。我不明白发生了什么。h5c++ Reader.cpp main.cpp
【解决方案2】:

有一个不应存在的; 分号。

Reader::Reader(int month)//; remove semicolon from this line !!!
{
    SetDate(month);
}

【讨论】:

  • 称为分号。 :-)
  • @LightnessRacesinOrbit:它实际上被称为“分号”;它没有连字符。
  • 谢谢。现在我编译没有错误。但是当我编译我的文件时,它正在创建 a.out 这可能是我的另一个 C 项目 exe 文件。我不明白发生了什么。h5c++ Reader.cpp main.cpp 然后我做了 h5c++ Reader.cpp main.cpp -o我的第一个
  • 发现了。一些路径问题。
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 2012-01-14
  • 1970-01-01
  • 2012-10-06
  • 2015-10-07
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
相关资源
最近更新 更多