不是类或命名空间名称
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”:不是类或命名空间名称