这似乎是一个常见的问题。我在classA中定义了一个枚举,然后在classB中包含了classA。然后,在classB中我定义了一个函数,它返回classA中定义的枚举类型...见下文。我收到以下错误:
aFirst.obj:错误LNK2019:未解析的外部符号" public:enum justEnum :: things_t __thiscall usesTheEnum :: returnsThings(void)" (?returnsThings @ usesTheEnum @@ QAE?AW4things_t @ justEnum @@ XZ)在函数_wmain中引用 1> C:\ Documents and Settings \ Ben \ My Documents \ Visual Studio 2010 \ Projects \ aFirst \ Debug \ aFirst.exe:致命错误LNK1120:1个未解析的外部
#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 :(得分:2)
您需要指定returnsThings()
的定义是usesTheEnum
类的一部分。
justEnum::things_t usesTheEnum::returnsThings()
{
return justEnum::ONE;
}
答案 1 :(得分:0)
错误LNK2019:未解析的外部符号“public:enum justEnum :: things_t __thiscall usesTheEnum :: returnsThings (void)”
编译器抱怨usesTheEnum::returnThings()
未定义,我在您发布的代码中看不到定义。您应该在一个翻译单元中提供该功能的定义。
我认为我不能强调学习阅读错误消息的重要性。编译器最好告诉你出了什么问题。
答案 2 :(得分:0)
不舒服,但你不能把这个枚举移出课堂吗?
或者在类的.cpp上写下类似的内容 extern enum classname :: things_t; 只是将枚举添加到生成的lib中,这将是与之相关联的内容。