0

这似乎是一个常见的问题。我在classA中定义了一个枚举,然后在classB中包含了classA。然后,在 classB 中,我定义了一个函数,该函数返回 classA 中定义的枚举类型......见下文。我收到以下错误:

aFirst.obj:错误 LNK2019:函数 _wmain 1>C 中引用的未解析的外部符号“public: enum justEnum::things_t __thiscall usesTheEnum::returnsThings(void)”(?returnsThings@usesTheEnum@@QAE?AW4things_t@justEnum@@XZ) :\Documents and Settings\Ben\My Documents\Visual Studio 2010\Projects\aFirst\Debug\aFirst.exe : 致命错误 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;
}
4

3 回答 3

2

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

justEnum::things_t usesTheEnum::returnsThings()
{
    return justEnum::ONE;
}
于 2012-08-25T00:32:47.720 回答
0

错误 LNK2019:未解析的外部符号“公共:枚举 justEnum::things_t __thiscall usesTheEnum::returnsThings (void)”

编译器抱怨usesTheEnum::returnThings()未定义,我在您发布的代码中看不到定义。您应该在一个翻译单元中提供函数的定义。

我认为我不能足够强调学习阅读错误信息的重要性。编译器正在尽最大努力告诉您出了什么问题。

于 2012-08-25T00:28:58.797 回答
0

不舒尔,但你不能把枚举移出课堂吗?

或者在类的 .cpp 上写一些类似 extern enum classname::things_t; 只是将枚举添加到生成的库中,这就是将要链接的内容。

于 2012-08-25T00:32:15.000 回答