我有一个简单的类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
谁能告诉我哪里错了?
答案 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