2009-02-27 2 views
1

Visual C++에서 데이터 구조가있는 학교 프로젝트 용으로 작업 중입니다. 오늘 코드를 컴파일하고 컴파일 해 집에 가져가 더 이상 작동하지 않습니다. 두 컴퓨터에서 Visual Studio 2008을 사용하고 있습니다. 여기에 오류 텍스트가 있습니다.LNK2005 - Visual Studio - 수정 전, 변경 전, 현재 컴파일하지 않음

이 프로그램과 관련이 있을지 모르지만 내 프로그램에는 SearchableADT에서 상속하는 BST에서 상속 한 AVL이라는 세 가지 기본 클래스가 있습니다. 템플릿 기반 클래스입니다.

BST.obj : 오류 LNK2005 : "public : __thiscall BST, 클래스 std :: allocator> :: BST, 클래스 std :: allocator >> (void)"(0? $ BST @ V? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@@@ QAE @ XZ) AVL.obj에 이미 정의되어 있습니다.

나는 할 것. 나는 몇 포럼에서 주위를 찌르고 MSDN 페이지를 보았지만 아무 것도 수정할 수 없었다.

내가 잊어 버린 사이트에서 언급 한 사실 중 하나는 # ifndef/# 내 AVL에 대해 정의한 것입니다. 나는 새로운 프로젝트를 만들고이 코드로 모든 코드를 복사하여 붙여 넣었지만 여전히 같은 오류가 발생합니다. 나는 여러개의 라이브러리를 포함하고 있지 않다는 것을 확인하기 위해 코드를 살펴 봤다. 나는 여기서부터 무엇을해야 할지를 놓치고 있습니다.

제공 할 수있는 도움에 감사드립니다. 중요하지 않은 것을 미리 제출해 주셔서 미리 감사드립니다.

편집 : 지금 인라인으로 무엇을 의미하는지에 대해 100 % 확신하지 못하고 있습니다. 나는 실제 함수를 정의하는 별도의 cpp를 가지고있다. 그렉의 답변에있는 인라인 것은 여전히 ​​적용됩니까?

MSN, 귀하의 답변을 이해하지 못했습니다. 그 얘기, 또는이 문제가 될 수있는 경우에 있었는지의 경우 기본 생성자의 여러 사본에 관해서는, 나는 확실하지 않다

BST<int>::BST() 
{ 
    root = new Node<int>; 
} 

BST<string>::BST() 
{ 
root = new Node<string>; 
} 

가 않습니다. 내 헤더 파일은 int 또는 string 템플릿에 대해서만 BST();가 없습니다. 강사가 템플릿 수업에 필요하다고 말했기 때문에 나는 그 정의를 내 cpp에 가지고있다.

매우

답변

0

선언 BST : BST (무효) 인라인 감사하고 하나 정의 규칙을 위반하지 않았는지 확인하고 BST의 다른 구현을 가지고 : BST (무효) 다른 전처리에 따라 장난.

1

헤더 파일에서 비 인라인 방식으로 메서드를 정의한 것처럼 들릴 수 있습니다. 다음으로, 동일한 Foo<T>::bar() 기능의 두 가지 정의를 제공하는 두 가지 모듈로를 포함한 헤더 파일에두고

template <class T> class Foo { 
    void bar(); 
}; 

template <class T> void Foo<T>::bar() 
{ 
    // ... 
} 

예를 들어, 헤더 파일에서 다음을 갖는 이러한 문제를 야기 오류가 발생했습니다.

template <class T> class Foo { 
    void bar() { 
     // ... 
    } 
} 
1

당신은 템플릿의 각 인스턴스 유형에 대한 별도의 생성자를 정의하지 : 하나의 해결책은 함수를 인라인으로 선언하는 것입니다. BST를 위해서는 하나의 생성자 만 필요합니다. 템플릿 매개 변수를 사용하여 노드 클래스의 인스턴스를 만들 수 있습니다.

root = new Node<T>();