2011-08-13 58 views
6

Tôi biết câu hỏi này đã được hỏi và trả lời trước đó, nhưng không có giải pháp nào có vẻ phù hợp với tôi và trình biên dịch của tôi hoạt động rất lạ với lỗi này.không phải là tên lớp hoặc không gian tên

Khi tôi cố gắng và biên dịch mã của tôi tôi nhận được rất nhiều lỗi như thế này:

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 

tôi gặp phải loại hình báo lỗi khi biên dịch dự án của tôi trước đây, nhưng nó dùng thần thông biến mất. Tôi đã cố gắng khắc phục sự cố và sau một thời gian, nó chỉ bắt đầu hoạt động trở lại sau khi tôi hoàn nguyên tất cả các thay đổi của mình.

Tôi nghĩ rằng đây có thể là vấn đề với tiêu đề được biên dịch trước của tôi, vì lỗi này xuất hiện sau khi tôi đã cố khắc phục lỗi với PCH của tôi không hoạt động đúng cách.

Đây là mã của tôi (và tôi biết nó không được thiết kế đó tốt, chỉ cần cố gắng để làm cho nó làm việc vào lúc này: 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

Bạn có chăm sóc cho chúng tôi ** nơi ** lỗi xảy ra, hoặc là một phần này của bài kiểm tra? Ngoài ra, '#include" stdafx.h "' có lẽ nên ở trên cùng. –

Trả lời

23

PCH (nghĩa là stdafx.h) nên được bao gồm đầu tiên trong file .cpp. Vì vậy, làm như sau:

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

Xem các chủ đề này:

+1

Hoặc bao gồm cả hai Target-files trong 'stdafx.h'. – Ajay

+2

Vâng, điều này làm việc, cảm ơn bạn rất nhiều. Bạn có biết tại sao nó gây ra lỗi trong một số tệp chứ không phải ở các tệp khác không? Chỉ tò mò thôi. –

+0

@Nick: Duyệt qua các liên kết để biết chi tiết. – Nawaz

Các vấn đề liên quan