不是一个类或命名空间名称。

7

我知道这个问题已经被问答过,但没有一个解决方案对我有效,并且我的编译器在出现这个错误时表现得非常奇怪。

当我尝试编译我的代码时,我会遇到许多这样的错误:

Error   1   error C2653: 'TargetList' : is not a class or namespace name    c:\projects\arcturus\augmentedreality\targetlist.cpp    5   1   AugmentedReality
Error   2   error C2065: 'Target' : undeclared identifier   c:\projects\arcturus\augmentedreality\targetlist.cpp    5   1   AugmentedReality
Error   3   error C2146: syntax error : missing ')' before identifier 'target'  c:\projects\arcturus\augmentedreality\targetlist.cpp    5   1   AugmentedReality
Error   4   error C2059: syntax error : ')' c:\projects\arcturus\augmentedreality\targetlist.cpp    5   1   AugmentedReality
Error   5   error C2143: syntax error : missing ';' before '{'  c:\projects\arcturus\augmentedreality\targetlist.cpp    6   1   AugmentedReality
Error   6   error C2447: '{' : missing function header (old-style formal list?) c:\projects\arcturus\augmentedreality\targetlist.cpp    6   1   AugmentedReality

我之前在编译项目时遇到了这种错误,但它神奇地消失了。我试图修复问题,在一段时间后,当我还原了所有更改后,它就又开始工作了。
我认为这可能是我的预编译头文件有问题,因为这个错误是在我尝试修复PCH无法正常工作的问题后出现的。
以下是我的代码(我知道它设计得不太好,只是想让它暂时能够工作:P):
StdAfx.h
#pragma once

#define _USE_MATH_DEFINES
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>

Target.h

#pragma once

#include "Position.h"
#include <string>
#include <vector>

class Target
{
public:
    Target();
    Target(std::string shortName, std::string longName, Position position);
    ~Target();

    bool UpdateTargetData(Position currentPosition);

    std::string mShortName;
    std::string mLongName;
    Position mPosition;
    double mDistance;
    double mHorizontalBearing;
    double mVerticalBearing;
};

Target.cpp

#include "Target.h"
#include "stdafx.h"

bool Target::UpdateTargetData(Position currentPosition)
{
    mDistance = currentPosition.GetDistance(mPosition);
    mHorizontalBearing = currentPosition.GetHorizontalBearing(mPosition);
    mVerticalBearing = currentPosition.GetVerticalBearing(mPosition);

    return true;
}

TargetList.h

#pragma once

#include "Target.h"

class TargetList
{
public:
    TargetList();
    ~TargetList();

    bool AddTarget(Target target);
    bool GetTarget(std::string shortName, Target& returnTarget);
    bool RemoveTarget(std::string shortName);

private:
    std::vector<Target> mTargets;
};

TargetList.cpp

#include "TargetList.h"
#include "Target.h"
#include "stdafx.h"

bool TargetList::AddTarget(Target target)
{
    if (GetTarget(target.mShortName, Target()) != false)
    {
        mTargets.push_back(target);
        return true;
    }

    return false;
}

bool TargetList::GetTarget(std::string shortName, Target& returnTarget)
{
    std::vector<Target>::iterator iterator;

    for (iterator = mTargets.begin(); iterator < mTargets.end(); iterator++)
    {
        if ((*iterator).mShortName == shortName)
        {
            returnTarget = (*iterator);
            return true;
        }
    }

    return false;
}

bool TargetList::RemoveTarget(std::string shortName)
{
    std::vector<Target>::iterator iterator;

    for (iterator = mTargets.begin(); iterator < mTargets.end(); iterator++)
    {
        if ((*iterator).mShortName == shortName)
        {
            mTargets.erase(iterator);
            return true;
        }
    }

    return false;
}

5
你可以告诉我们错误出现的位置吗?或者这是测试的一部分吗?另外,#include "stdafx.h" 应该放在最顶部。 - Kerrek SB
1个回答

27

1
请在stdafx.h中包含这两个目标文件。 - Ajay
2
没错,这个有效了,非常感谢。你知道为什么它在一些文件中会导致错误,而在其他文件中不会吗?只是好奇。 - Nick Taylor
@Nick:详细了解请查看链接。 - Nawaz
2
也许是因为其他人有时间写出更好的答案。 - UncleBens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接