2012-08-25 26 views
0

这似乎是一个常见问题。我在classA中定义了一个枚举,然后在classB中包含了classA。然后,在classB中,我定义了一个函数,它返回classA中定义的枚举类型......见下文。我得到以下错误:函数返回另一个类中定义的枚举(致命链接错误)

aFirst.obj : error LNK2019: unresolved external symbol "public: enum justEnum::things_t __thiscall usesTheEnum::returnsThings(void)" ([email protected]@@[email protected]@@XZ) referenced in function _wmain 1>C:\Documents and Settings\Ben\My Documents\Visual Studio 2010\Projects\aFirst\Debug\aFirst.exe : fatal error LNK1120: 1 unresolved externals

#pragma once 
class justEnum 
{ 

public: 
    justEnum(void); 
    ~justEnum(void); 
    enum things_t{ONE, TWO}; 
}; 



#pragma once 
#include "justEnum.h" 

class usesTheEnum 
{ 
public: 
    usesTheEnum(void); 
    ~usesTheEnum(void); 
    justEnum::things_t returnsThings(void); 
}; 



#include "StdAfx.h" 
#include "usesTheEnum.h" 
#include "justEnum.h" 

usesTheEnum::usesTheEnum(void) 
{ 
} 


usesTheEnum::~usesTheEnum(void) 
{ 
} 


justEnum::things_t returnsThings() 
{ 
    return justEnum::ONE; 
} 



// tester.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <stdio.h> 
#include <iostream> 
#include "justEnum.h" 
#include "usesTheEnum.h" 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    usesTheEnum aUser; 
    justEnum anEnum; 
    justEnum::things_t anotherEnum; 
    anotherEnum = justEnum::ONE; 
    aUser.returnsThings(); 
    cout << anotherEnum; 
    return 0; 
} 
+0

justEnum的构造函数和析构函数在哪里定义? – chrisaycock

+0

@ user442920你不需要在C++中使用'void'指定一个空的参数列表。 – oldrinb

回答

2

您需要指定您的returnsThings()的定义是usesTheEnum类的一部分。

justEnum::things_t usesTheEnum::returnsThings() 
{ 
    return justEnum::ONE; 
} 
+0

谢谢!这有助于很多! :) – user442920

0

error LNK2019: unresolved external symbol "public: enum justEnum::things_t __thiscall usesTheEnum::returnsThings(void)"

编译器抱怨usesTheEnum::returnThings()没有定义,我不能看到你发布的代码的定义。您应该在一个翻译单元中为该功能提供定义。

我不认为我可以强调它学到多么重要,阅读错误信息。编译器正在做这是最好的告诉你什么是错的。

0

不舒服,但是你不能只把enum从课堂上移开吗?

或者在类的.cpp上写一些像 extern enum classname :: things_t; 只是为了将enum添加到生成的lib文件中,这是将链接到的内容。

+0

他有关于函数定义的链接错误。这与'enum'如何定义无关。 – chrisaycock

相关问题