2014-06-30 4 views
0

프로그램을 컴파일하려고 할 때 (아래 부분 참조) "fraction :: from_string (char const *)에 대한 정의되지 않은 참조"오류가 발생합니다. 문자열을 C 스타일 문자열로 변환하는 데 문제가 있다고 의심되지만 해결할 수없는 것 같습니다. 오류가 발생하는 생성자 밖에 from_string 함수를 호출 할 수 있지만 생성자에서 코드를 활성화하려고하면이 오류가 발생합니다.g ++ 일부 함수에 대한 정의되지 않은 참조

여기 내 코드입니다. 예, 표준에 이미 "비율"또는 비슷한 대상이 있다고 생각합니다. 문제와 관련이 없습니다. 파일 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; 
} 
내가 컴파일러에서 다음과 같은 오류가

:

------- ------- 빌드 : 분수 (컴파일러 : MinGW-w64/GNU GCC 4.9.0 컴파일러) ---------------

x86_64-w64-mingw3 2-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 *) ' collect2.exe : 오류 : ld가 1을 반환했습니다. 종료 상태 상태 1 (0 분, 2 초) 1 개의 오류, 1 개의 경고 (0 분), 2 초

작업 할 함수 호출을 얻는 방법 ... 한 번에 생성자는 다음과 같이 보입니다.

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 개체를 생성했기 때문에이 작업을 수행 할 수 있습니까?

답변

4

char과는 아무 관련이 없습니다. 새로운, 이전에 선언되지 않은, 무료 기능이 아닌 클래스에서 static 하나

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

. 당신은 필요

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

그래를 내는 from_string 함수에 인수 하구와 클래스 메소드에 앞뒤로 정적에서 그것을 전환 사이에, 나는 구현 파일에서, 분명히 선언 파일에서 정적 및 글로벌 IT 왼쪽 . 눈의 두 번째 세트를 가져 주셔서 감사합니다 ...이 날 이틀 동안 미치게되었습니다. – oweinh