c ++'未定义引用'错误

时间:2015-04-06 12:41:09

标签: c++ compiler-errors

编译c ++程序时,我遇到了一个“未定义的引用”错误。我知道这是常见的陷阱,但到目前为止还无法弄清楚我做错了什么。

这是相关代码。 Ex1Two_Sum.h:

#ifndef EX1TWO_SUM_H
#define EX1TWO_SUM_H

#include <vector>
using namespace std;

namespace ddc {
class Ex1Two_Sum
{
   public:
     void f();
   protected:
   private:
};
}

#endif 

Ex1Two_Sum.cpp:

#include <vector>
#include <cstddef> 
#include <iostream>

using namespace std;

namespace ddc {
class Ex1Two_Sum {
public:

  void f(){
    cout << "works" << endl;
  }
};
}

最后,main.cpp:

#include <iostream>
#include "Ex1Two_Sum.h"

using namespace std;
using namespace ddc;

int main()
{
  Ex1Two_Sum ex1;
  ex1.f();
  return 0;
}

我编译如下:

g++ -std=c++11 -c Ex1Two_Sum.cpp 
g++ -std=c++11 -c main.cpp 
g++ Ex1Two_Sum.o main.o 

产生以下信息:

main.o: In function `main':
main.cpp:(.text+0x2c): undefined reference to `ddc::Ex1Two_Sum::f()'
collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:4)

当需要提供非内联函数定义时,源文件使用内联函数定义重新定义整个类。

#include "Ex1Two_Sum.h"

void ddc::Ex1Two_Sum::f() {
    std::cout << "should work\n";
}

另外,请不要将using namespace std;放入标题中。并非所有人都希望以potentially surprising方式污染全局命名空间。

答案 1 :(得分:0)

首先,该命令的哪一行抛出该错误?

其次,我认为您忘记在Ex1Two_Sum.h

中加入Ex1Two_Sum.cpp

第三,您需要将class .......中的Ex1Two_Sum.cpp更改为:

void Ex1Two_Sum::f(){...}