2011-08-13 24 views
6

Sé que esta pregunta se ha realizado y respondido antes, pero ninguna de las soluciones parece haber funcionado para mí, y mi compilador está actuando realmente raro con este error.no es una clase o nombre de espacio de nombres

Cuando intento y compilar el código consigo numerosos errores como estos:

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 

me encontré con este tipo de error al compilar mi proyecto antes, pero místicamente desapareció. Estaba tratando de solucionar el problema, y ​​después de un tiempo simplemente comenzó a funcionar nuevamente después de revertir todos mis cambios.

Creo que esto puede ser un problema con mi encabezado precompilado, ya que este error apareció después de haber intentado corregir un error con mi PCH no funcionaba correctamente.

Aquí está mi código (y sé que no está tan bien diseñado, tratando de conseguir que funcione en el momento: 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

¿Le importaría decirnos ** ** donde se produce el error, o es esta parte ¿del examen? Además, el '#include" stdafx.h "' probablemente debería estar en la parte superior. –

Respuesta

23

PCH (es decir stdafx.h) debe ser incluido por primera vez en el archivo .cpp. Así que hacer esto:

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

consulte estos temas:

+1

O incluya ambos archivos Target en 'stdafx.h'. – Ajay

+2

Sí, esto funcionó, muchas gracias. ¿Sabes por qué causó errores en algunos archivos y no en otros? Sólo curioso. –

+0

@Nick: revise los enlaces para saberlo en detalle. – Nawaz

Cuestiones relacionadas