저는 간단한 문제가 있다고 생각합니다. 하지만 C++ 프로그래밍에 익숙하지 않은 지금은 해결할 수 없습니다. 나는 원래의 코드가 훨씬 더 길기 때문에 가능한 한 짧고 간단한 코드를 만들기 위해 새로운 C++ 프로젝트를 만들었습니다. 문제는 그대로 유지했습니다. Stackoverflow와 Google을 검색하여 약 50 건의 관련 문제를 읽었으나 지금까지 해결할 수있는 방법이 없습니다. 하나의 cc와 하나의 h 파일에 모든 것을 넣는 것은 효과가 있지만 내가 선호하는 것이 아닙니다. 도움에 미리 감사드립니다.클래스를 사용하는 동안 연결하는 동안 단순한 C++ 정의되지 않은 참조 오류가 발생했습니다.
나는 우분투 14.04/코드 : 블록 13.12/GCC와 g ++ 4.8.2
문제를 사용하고 내가 때문에 (다른 파일에 정의 된 클래스의 내부 및 컴파일 작업하는 동안 기능에 액세스 할 것입니다 file1.h의 extern에) 연결이 실패합니다. 방금 "Simple S1;"을 입력하면 대신 "extern Simple S1;" file1.h 및 file1.cc에서 제거 할 여러 선언 오류가 예상됩니다. 분명히 "extern"트릭은 클래스에서 작동하지 않지만 변수와 함께 잘 작동합니다.
file1.h :
#ifndef FILE1_H
#define FILE1_H
class Simple
{
private:
unsigned int length = 10;
public:
void SetLength(unsigned int l) {length = l;}
unsigned int GetLength() {return length;}
};
extern Simple S1;
#endif
file1.cc :
#include <iostream>
#include "file1.h"
#include "file2.h"
int main()
{
Simple S1;
unsigned int l = GetL();
std::cout << "length=" << l << "\n";
l = 20;
l = GetL();
std::cout << "length=" << l << "\n";
return 0;
}
file2.h :
#ifndef FILE2_H
#define FILE2_H
unsigned int GetL();
#endif
file2.cc :
#include "file1.h"
#include "file2.h"
unsigned int GetL()
{
return S1.GetLength();
}
명령 에러를 구축 :
g++ -std=c++11 -Wall -fexceptions -g -c file1.cc -o obj/Debug/file1.o
g++ -std=c++11 -Wall -fexceptions -g -c file2.cc -o obj/Debug/file2.o
g++ -o bin/Debug/Test obj/Debug/file1.o obj/Debug/file2.o
obj/Debug/file2.o: In function `GetL()':
file2.cc:6: undefined reference to `S1'
collect2: error: ld returned 1 exit status
감사를하는 I 이 명백한 것을 보지 못했습니다. – WillemB
그리고 나는 다른 대답보다 1 분 앞서 있었지만 당신은 다른 하나를 accpeted했다. – CashCow
미안해, 내 질문을 확인한 후에 다른 것을 먼저 나열했다. 빨리 와우라는 대답을받을 것이라고 생각하지 않았습니다. 나는 당신에게 두 학점을 모두 나누는 것을 선호하지만 인정 된 대답을 수정했습니다. – WillemB