不是类名或名称空间名
is not a class or namespace name
本文关键字:空间 更新时间:2023-10-16
我知道这个问题以前已经问过并回答过了,但是没有一个解决方案似乎对我有效,我的编译器对这个错误的行为真的很奇怪。
当我尝试编译我的代码时,我得到了许多错误,例如:
Error 1 error C2653: 'TargetList' : is not a class or namespace name c:projectsarcturusaugmentedrealitytargetlist.cpp 5 1 AugmentedReality
Error 2 error C2065: 'Target' : undeclared identifier c:projectsarcturusaugmentedrealitytargetlist.cpp 5 1 AugmentedReality
Error 3 error C2146: syntax error : missing ')' before identifier 'target' c:projectsarcturusaugmentedrealitytargetlist.cpp 5 1 AugmentedReality
Error 4 error C2059: syntax error : ')' c:projectsarcturusaugmentedrealitytargetlist.cpp 5 1 AugmentedReality
Error 5 error C2143: syntax error : missing ';' before '{' c:projectsarcturusaugmentedrealitytargetlist.cpp 6 1 AugmentedReality
Error 6 error C2447: '{' : missing function header (old-style formal list?) c:projectsarcturusaugmentedrealitytargetlist.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;
}
PCH(即stdafx.h
)应首先包含在.cpp
文件中。所以这样做:
#include "stdafx.h" //this should be included first!
#include "TargetList.h"
#include "Target.h"
查看以下主题:
- 关于stdafx.h丢失在我的编译器(mingw32在windows上) msvc++编译错误是什么意思
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级