g ++"未定义引用"一些功能

时间:2014-06-30 18:33:04

标签: c++ g++ undefined-reference

我收到错误"对fraction :: from_string(char const *)"的未定义引用;当我尝试编译程序时(如下部分所示)。我怀疑我将字符串转换为C风格的字符串存在一些问题,但我似乎无法解决它。我能够在发生错误的构造函数之外调用from_string函数,但是如果我尝试在构造函数中启用代码,则会出现此错误。

这是我的代码。是的,我相信有一个"比率"或标准中已有的类似对象。与此问题无关。

文件fraction.h中的

…
class fraction {
public:
…
  fraction();
  fraction( int a );
  fraction( int a, int b, bool red );
  fraction( string inStr, bool red );
…
  static fraction from_string( const char* raw );
…
}
文件fraction_imp.h中的

#include "fraction.h"
…
fraction from_string( const char* raw )
{
    // omitted for brevity. Parses the string to extract a numerator
    // and denominator for the fraction object
}
…
fraction::fraction( string inStr, bool red = false ) : auto_reduce(red)
{
    char* raw = const_cast<char*>( inStr.c_str() );
    fraction t = from_string( cRaw );
    numer = t.numer; denom = t.denom;
}

我从编译器中收到以下错误:

-------------- Build:D in fraction(编译器:MinGW-w64 / GNU GCC 4.9.0编译器)-------------- -

x86_64-w64-mingw32-g ++ -Wall -fexceptions -g -std = c ++ 11 -c C:\ cpp \ fraction \ main.cpp -o obj \ D \ main.o x86_64-w64-mingw32-g ++ -o bin \ D \ rational.exe obj \ D \ main.o
obj \ D \ main.o:在函数fraction::fraction(std::string, bool)': C:/cpp/fraction/fraction_imp.h:84: undefined reference to fraction :: from_string(char const *)&#39; collect2.exe:错误:ld返回1退出状态 处理终止,状态为1(0分钟,2秒(秒)) 1个错误,1个警告(0分钟,2秒(s))

我已经尝试过很多方法让函数调用工作......在某一点上,构造函数看起来像这样:

fraction::fraction( string inStr, bool red = false ) : auto_reduce(red)
{
    char* raw = new char[inStr.size() + 1];
    copy(inStr.begin(), inStr.end(), raw);
    raw[inStr.size()] = '\0';
    char cRaw[50];
    strcpy( cRaw, raw );
    fraction t = from_string( cRaw );
    numer = t.numer; denom = t.denom;
}

但仍然没有运气。由于错误显示undefined reference to fraction::from_string(char const*)我不确定我持续获得的类型是否是指向字符的常量指针而不是指向常量字符的指针......?或者这是因为我在fraction构造函数中创建了一个临时的fraction对象?

1 个答案:

答案 0 :(得分:4)

这与stringchar无关。

fraction from_string( const char* raw )
{
    // ...
}

这是一个新的,以前未声明的免费功能,而不是你班级的static。你需要:

fraction fraction::from_string( const char* raw )
{
    // ...
}