C++ 不是类或命名空间名称
我知道这个问题以前有人问过,也有人回答过,但似乎没有一个解决方案对我有效,我的编译器对这个错误表现得很奇怪 当我尝试编译我的代码时,我会遇到许多错误,例如:C++ 不是类或命名空间名称,c++,class,precompiled-headers,C++,Class,Precompiled Headers,我知道这个问题以前有人问过,也有人回答过,但似乎没有一个解决方案对我有效,我的编译器对这个错误表现得很奇怪 当我尝试编译我的代码时,我会遇到许多错误,例如: Error 1 error C2653: 'TargetList' : is not a class or namespace name c:\projects\arcturus\augmentedreality\targetlist.cpp 5 1 AugmentedReality Error 2 er
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>
#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;
};
#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.h
#pragma once
#define _USE_MATH_DEFINES
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#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;
};
#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;
};
#pragma一次
#包括“Target.h”
类目标列表
{
公众:
TargetList();
~TargetList();
bool AddTarget(Target-Target);
bool GetTarget(std::string shortName、Target和returnTarget);
bool RemoveTarget(std::string shortName);
私人:
std::向量mTargets;
};
TargetList.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;
}
#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;
}
#包括“TargetList.h”
#包括“Target.h”
#包括“stdafx.h”
bool TargetList::AddTarget(目标)
{
if(GetTarget(target.mShortName,target())!=false)
{
mTargets.push_back(目标);
返回true;
}
返回false;
}
bool TargetList::GetTarget(std::string shortName、Target和returnTarget)
{
std::vector::iterator迭代器;
for(迭代器=mTargets.begin();迭代器PCH(即stdafx.h
)应首先包含在.cpp
文件中。这样做:
#include "stdafx.h" //this should be included first!
#include "TargetList.h"
#include "Target.h"
请参见以下主题:
您是否愿意告诉我们错误发生在哪里,或者这是测试的一部分?另外,#include“stdafx.h”
应该放在最上面。或者在stdafx.h
本身中包含两个目标文件。是的,这很有效,非常感谢。您知道为什么它会导致某些文件出错,而不是其他文件出错吗?只是好奇而已。@Nick:浏览链接,详细了解一下。也许是为了让别人有时间写一个更好的答案。