2011-08-13 19 views
6

私はこの質問が以前に尋ねられ、答えられたことは知っていますが、解決策のどれも私のために働いたようではなく、コンパイラはこのエラーで本当に変です。はクラスまたは名前空間の名前ではありません

私は試してみて、私のコードをコンパイルするとき、私はこのような多数のエラーを取得:

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" //this should be included first! #include "TargetList.h" #include "Target.h" 

は、これらのトピックを参照してください。テストの?また、 '#include" stdafx.h "はおそらく最上位に位置するはずです。 –

答えて

23

PCH(すなわちstdafx.h)が最初.cppファイル内に含まれるべきです。だから、次の操作を行います。あなたは**エラーが発生した場合、またはこの部分です**私たちに伝えるためにいかが

+1

また、両方のターゲットファイルを 'stdafx.h'自体に含めます。 – Ajay

+2

うん、これはうまくいきました、ありがとうございました。 なぜファイルによってはエラーが発生したのか、他のファイルでエラーが発生したのか分かりませんか?ちょっと興味があるんだけど。 –

+0

@ニック:詳細を知るためのリンクを見てください。 – Nawaz

関連する問題