编译器错误未定义符号

时间:2012-09-03 07:50:33

标签: c++ unix solaris

我有一个简单的类ina头文件:

> cat Algorithms.hh
#ifndef Algorithms_hh
#define Algorithms_hh
#include<vector>
class Algorithms
{
public:

Algorithms();
void BubbleSort();

std::vector<int> myarray;

};
#endif

然后是相应的c文件:

> cat Algorithms.cc
#include <iostream>
#include <vector>
#include "Algorithms.hh"

Algorithms::Algorithms()
{
myarray.push_back(0);
}


void Algorithms::BubbleSort()
{
      int i, j, flag = 1;    // set flag to 1 to start first pass
      int temp;             // holding variable
      int numLength = myarray.size(); 
      for(i = 1; (i <= numLength) && flag; i++)
     {
          flag = 0;
          for (j=0; j < (numLength -1); j++)
         {
               if (myarray[j+1] > myarray[j])      // ascending order simply changes to <
              { 
                    temp = myarray[j];             // swap elements
                    myarray[j] = myarray[j+1];
                    myarray[j+1] = temp;
                    flag = 1;               // indicates that a swap occurred.
               }
          }
     }
}
>

然后是主要功能:

> cat algo2.cc
#include <iostream>
#include <vector>
#include "Algorithms.hh"

using namespace std;

int main(int argc,char **argv)
{

Algorithms *arr=new Algorithms();
arr->myarray.push_back(1);
arr->myarray.push_back(2);
arr->myarray.push_back(100);
return 0;
}

> 

当我编译main时: 我收到以下错误:

> CC algo2.cc 
Undefined                       first referenced
 symbol                             in file
Algorithms::Algorithms()              algo2.o
ld: fatal: Symbol referencing errors. No output written to a.out

谁能告诉我哪里错了?

2 个答案:

答案 0 :(得分:2)

这是一个链接器错误,链接器告诉你它无法找到类Algorithms的构造函数的定义。你应该编译:

CC Algorithms.cc algo2.cc 

由于错误前面的ld:,您可以确定它是链接器错误。

当然,正如Kerrek SB所说,你需要声明你的构造函数,而不是前面的Algorithms:: ......

答案 1 :(得分:0)

您忘记将两个.cc文件都包含在编译中:

cc algo2.cc Algorithms.cc

如果包含带声明的头文件,例如

#include "Algorithms.hh"

您还应该在.c或.lib中提供实现,定义。或动态加载库。在你的情况下你的库是Algorithms.cc,所以只需将它添加到编译阶段,然后将它们添加到临时目标文件

Algo2.a + Algorithms.a

将转到

a.out