2012-11-11 4 views
1

아주 작은 프로그램이 나를 미치게 만듭니다. 나는 항상 다음과 같은 오류 메시지를 얻을 :오류 LNK2019 해결 방법 : 확인되지 않은 외부 기호

여기
Error 1 error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall ErstesPraktikum::createNameString(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function _main Praktikum_gra.obj GRA 
Error 2 fatal error LNK1120: 1 unresolved externals C:\Users\xxx\Documents\Visual Studio 2008\Projects\GRA\Debug\GRA.exe GRA 

이 클래스ErstesPraktikum 및 Praktikum_gra 플러스 해당 헤더 파일이 들어 나 프로그램입니다.

은 그냥 ErstesPraktikum 클래스의 메소드를 호출하는 Praktikum_gra 클래스를 사용하고 싶습니다. 이 오류를 해결하는 데 몇 시간을 보냈지만 성공하지는 못했습니다. 그것은 프로그래밍 실수 또는 구성 문제입니까? 문자열표준을위한 단지 래퍼입니다 :: OpenCV의 문자열 : 내 마지막 희망은 참고

... 당신의 누군가가 나에게 힌트를 줄 수 있다는 것입니다.

ErstesPraktikum.h

#include <opencv2\core\core.hpp> 

using namespace std; 
using namespace cv; 

class ErstesPraktikum 
{ 
    private: 
     String convertInteger(int); 

    public: 
     String createNameString(String, String, String, int); 
     void readImage(String, Mat *); 
     void extractObjects(int, Mat *, Mat *); 
}; 

ErstesPraktikum.cpp

#include <opencv2\core\core.hpp> 
#include <opencv2\highgui\highgui.hpp> 
#include <opencv2\imgproc\imgproc.hpp> 
#include <fstream> 

using namespace std; 
using namespace cv; 


String convertInteger(int value) 
{ 
    stringstream ss; 
    ss << value; 
    return ss.str(); 
} 

String createNameString(String path, String fileName, String fileExtension, int buildNumber) 
{ 
    String pathString = path.append(fileName); 
    pathString = pathString.append("."); 
    pathString = pathString.append(convertInteger(buildNumber)); 
    pathString = pathString.append("."); 
    pathString = pathString.append(fileExtension); 

    return pathString; 
} 

void readImage(String nameString, Mat * image) 
{ 
    double mn = 0, mx = 0; 
    image = &cv::Mat(cv::Size(512, 512), IPL_DEPTH_8U, 1); 
    unsigned short *data; 
    data = (unsigned short *)image->data; 
    FILE *file; 
    file = fopen(nameString.c_str(), "rb"); 

    fseek(file, 1340, SEEK_SET); 
    fread(data, sizeof(unsigned short)*512*512, 1, file); 
    fclose(file); 


    //cv::cvSmooth(Image,Image); 

    //cv::minMaxLoc(image, &mn, &mx, NULL, NULL, 0); 
    //cv::convertScaleAbs(image, *target, 255/mx, -mn*255/mx); 
} 

void extractObjects(int threshold, Mat * img, Mat * binImg) 
{ 

} 

Praktikum_gra.h

class Praktikum_gra 
{ 
    public: 
     int main(void); 
} 

Praktikum_gra.cpp

#include "ErstesPraktikum.h" 

using namespace std; 
using namespace cv; 

    int main(void) 
    { 
     String path("C:\\Users\\xxx\\xxx\\xxx\\GRA P1\\Head_M\\"); 
     String fileName("vhm"); 
     String fileExtension("dcm"); 
     ErstesPraktikum prak; 

     for(int i = 1001; i <= 1245; i++) 
     { 
      String nameString = prak.createNameString(path, fileName, fileExtension, i); // this line is the cause of the error message, but why ? 
     } 

     return 0; 
    } 

이미 같은 모든 방법에 클래스 접두사를 추가하려고 :

String ErstesPraktikum::createNameString(String path, String fileName, String fileExtension, int buildNumber) 
{ 
    // [...] 
} 

그러나 이것은 또 다른 오류 메시지가 발생합니다 :

Error 1 error C2653: 'ErstesPraktikum' : is not a class or namespace name c:\users\xxx\documents\visual studio 2008\projects\gra\gra_u1\erstespraktikum.cpp 17 GRA 
+1

구현에 헤더를 포함하고, 구현에 'ClassName ::'접두사를 사용하고 구현에 연결해야합니다. 기본적으로이 오류와 관련된 문제는 info [here] (http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i)입니다. -고치다). – chris

+0

C2653 오류가 발생했을 때 헤더 'ErstesPraktikum.h'을 포함 시켰습니까? – Caribou

+0

@chris에게 조언 해 주셔서 감사합니다! ErstesPraktikum.cpp에 ErstesPraktikum.h를 포함 시켰고 클래스 접두어를 모든 메서드에도 추가했습니다. – Tolly1

답변

2

당신은

에이를
#include "ErstesPraktikum.h" 

in ErstesPrakticum.cpp. 의 경우 구현시 ErstesPrakticum::을 사용해야합니다.

String ErstesPraktikum::createNameString(....) { .... } 

등등.

+0

이 수정으로 오류가 해결되었습니다! (@chris가 이미 코멘트에 쓴 것처럼). 정말 고마워요! – Tolly1