2012-03-07 4 views
0

VS2010C++ 콘솔 응용 프로그램에서 작업 중이며 동일한 유형 (정적)의 정적 및 동적 객체를 포함하는 Manager 클래스가 하나 생성됩니다.미해결 외부 C++, 기본 생성자

원래 관리자 클래스의 생성자에서 구성되는 클래스에 기본 생성자가 없다는 오류가 발생했습니다. 그러나 런타임에 인스턴스를 생성해야하므로 기본 생성자가 없어야합니다. 런타임에 입력 한 정보가 있음) 보유 클래스의 기본 생성자를 작성하여 (아무 것도하지 않음) 끝내고 계속할 수있었습니다.

는 다음 나는 프로그램에 필요한 모든 기능을 수행있어, 나는 functionB에서 참조되지 않은 외부 기호 MethodA에 대해 뭔가 "LNK2019의 전체 무리를 얻을.

처음에는 대한 기본 생성자가 필요합니까 이유 실행 시간에 수행해야하는 경우 관리되는 클래스?

두 번째 이러한 LNK2019를 제거하는 방법은 무엇입니까? (이 메서드는 모두 머리글에 인라인으로 표시되며 유일한 참조 또는 (정적 멤버의 경우) 및 -> (동적 멤버의 경우)의 액세스 한정자를 혼합해야하는 것과 관련이있을 수 있습니다.

편집 : Thing.h

class Thing{ 
public : int ** Array; 
public : int size; 
public : Point pi; 
public : SinglyLinkedList * moves; 
... 
public :inline bool operator==(const Thing * _thing); 
... 
}; 
에 : 는 하나의 방법의 필요성을 제한하고, 링커 오류에 대한 동적

에 다른 정적을 수정하여 기본 생성자를 제거 할 수 있었다

Thing.cpp

bool Thing::operator==(const Thing * _Thing){ 
    for(int ii = 0; ii < m; ii++){ 
     for(int jj = 0; jj < m; jj++){ 
      if(Array[ii][jj] != _Thing->Array[ii][jj]){ 
       return false; 
      } 
     } 
    } 
    return true; 
} 

ThingMgr.h

class ThingMgr { 
public : Thing * control; 
public : Thing * Current; 
public : Thing * previous; 
public : int size; 

MAIN.CPP 나는 괄호를 넣어 필요되었을 수 있습니다 생각하지만 다음 VS 구성원 기대에 대해 소리 쳤다

1>Project_1.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Thing::operator==(class Thing const *)" ([email protected]@[email protected]@Z) referenced in function _wmain 

int _tmain{ 
    ... 
    ThingMgr * TestTings= new ThingMgr(num); 
    ... 
    if(testThings->control->operator==(testThings->Current)){ // pretty sure its here as it is not called anywhere else in the function. 
    ... 
} 

오류입니다. 다른 기능이 있지만 어쩌면 여기서 무슨 일이 일어나고 있는지 파악할 수 있다면 고칠 수 있어야합니다.

+0

note 모든 구성원에 대해 액세스 한정자를 식별하는 것은 일반적인 C++ 규칙이 아니라는 것을 알고 있지만 4 가지 다른 c/C++ 컴파일러로 작업했으며 어느 누구도 불평하지 않았거나 문제가 발생하지 않았습니다. – gardian06

+1

링크 문제 'inline'이라고 말하는 것으로 헤더에 연산자를 정의하겠다고 약속했으나 구현 파일에서만 정의했습니다. 인라인을 제거하십시오. –

답변

1

코드를 보는 것이 도움이됩니다. 그것의 소리에서 std::vector<T>은 객체를 초기화 할 필요가 있고, 복사 할 수있는 객체를 제공하지 않았다고해서 035가 아닌 크기가 주어진 std::vector<T>을 생성합니다. 당신은 빈 std::vector<T>을 만들려하고 (당신이 C++ 2011 시스템이있는 경우 또는 emplace()을) 오류를 링크에 대한

push_back()하여 쉽게 구성 객체를 사용할 수 있습니다 : 당신은 분명히 일부 기능을 정의하지 않았다 당신 사용하고 있습니다. 당신이 준 애매한 묘사로 말할 수있는 것은 정확히 없습니다. 예를 들어 자세한 내용을 입력해야합니다. 정확한 링크 오류와 함께 가정합니다.

+0

질문을 추가했습니다. – gardian06