不是类或命名空间名称

Posted

技术标签:

【中文标题】不是类或命名空间名称【英文标题】:is not a class or namespace name 【发布时间】:2011-08-13 11:35:38 【问题描述】:

我知道之前有人问过并回答过这个问题,但似乎没有一个解决方案对我有用,而且我的编译器对这个错误表现得很奇怪。

当我尝试编译我的代码时,会遇到很多错误,例如:

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;

【问题讨论】:

您愿意告诉我们错误发生在哪里,或者这是测试的一部分吗?此外,#include "stdafx.h" 应该位于最顶部。 【参考方案1】:

PCH(即stdafx.h)应首先包含在.cpp 文件中。这样做:

#include "stdafx.h"     //this should be included first!
#include "TargetList.h"
#include "Target.h"

查看这些主题:

About stdafx.h missing in my compiler(mingw32 on windows) What does this MSVC++ compile error mean

【讨论】:

或者在stdafx.h本身中包含两个目标文件。 是的,这很有效,非常感谢。您知道为什么它会导致某些文件出错,而其他文件不会出错吗?只是好奇。 @Nick:通过链接了解详细信息。 也许是为了让其他人有时间写一个更好的答案。

以上是关于不是类或命名空间名称的主要内容,如果未能解决你的问题,请参考以下文章

类或命名空间的名称问题

尽管编辑了我的包含语句以修复,但得到“错误 C2653:'TextureManager':不是类或命名空间名称”

升级项目时发现错误:操作符“=”不明确且“ios”:不是类或命名空间名称

窗体头文件中的“错误 C2653:系统不是类或命名空间名称”,Visual C++

错误:名称后跟 '::' 必须是类或命名空间名称

名称后跟 :: 必须是类或命名空间名称