0

これはよくある問題のようです。classAで列挙型を定義してから、classAをclassBに含めました。次に、classBで、classAで定義された列挙型を返す関数を定義しました...以下を参照してください。次のエラーが発生します。

aFirst.obj:エラーLNK2019:未解決の外部シンボル "public:enum justEnum :: things_t __thiscall usedTheEnum :: returnsThings(void)"(?returnsThings @ usedTheEnum @@ 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;
}
4

3 に答える 3

2

の定義がクラスreturnsThings()の一部であることを指定する必要があります。usesTheEnum

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

エラーLNK2019:未解決の外部シンボル "public:enum justEnum :: things_t __thiscall usedTheEnum :: returnsThings(void)"

コンパイラがusesTheEnum::returnThings()定義されていないと文句を言っており、投稿したコードに定義が表示されません。1つの変換単位で関数の定義を提供する必要があります。

エラーメッセージを読むことを学ぶことがどれほど重要かを強調することはできないと思います。コンパイラーは、何が悪いのかを伝えるのが最善です。

于 2012-08-25T00:28:58.797 に答える
0

シュアではありませんが、列挙型をクラスから移動することはできませんか?

または、クラスの.cppに、extern enum classname::things_t;のように記述します。生成されたライブラリに列挙型を追加するだけで、リンク先になります。

于 2012-08-25T00:32:15.000 に答える