Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > error C2653 не определяет класс


Автор: Thesame 16.10.2008, 14:07
есть:
Код

// NMEAParser.h
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_NMEAPARSER_H__26C0F55B_19A8_4E71_A1BA_A2EBA169FCEB__INCLUDED_)
#define AFX_NMEAPARSER_H__26C0F55B_19A8_4E71_A1BA_A2EBA169FCEB__INCLUDED_

#include "GPSInfo.h"    // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class NMEAParser  
{
public:
    NMEAParser();
    NMEAParser(LPCTSTR outputFileName);
    virtual ~NMEAParser();
    void Parse(const CHAR *buf, const UINT bufSize);
    GPSInfo& GetActualGPSInfo();

private:
    CFile m_outputFile;

    void ParseRecursive(const CHAR ch);
    void ParseNMEASentence(const CHAR *addressField, 
                           const CHAR *buf, const UINT bufSize);
    void ProcessGPGGA(const CHAR *buf, const UINT bufSize);
    void ProcessGPGSA(const CHAR *buf, const UINT bufSize);
    void ProcessGPGSV(const CHAR *buf, const UINT bufSize);
    void ProcessGPRMB(const CHAR *buf, const UINT bufSize);
    void ProcessGPRMC(const CHAR *buf, const UINT bufSize);
    void ProcessGPZDA(const CHAR *buf, const UINT bufSize);

    BOOL m_logging;
    GPSInfo m_GPSInfo;
};

#endif // !defined(AFX_NMEAPARSER_H__26C0F55B_19A8_4E71_A1BA_A2EBA169FCEB__INCLUDED_)


Код

#include "stdafx.h"
#include "NMEAParser.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


NMEAParser::NMEAParser()
{
  m_logging = FALSE;
}


Выдаётся ошибка: 1>d:\doc\visual studio 2008\projects\testpaser3\testpaser3\nmeaparser.cpp(18) : error C2653: 'NMEAParser' : is not a class or namespace name

Не могу понять в чём проблема? Посоветуйте пожалуйста.
Зарание спасибо!

Автор: Lazin 16.10.2008, 14:43
Цитата(Thesame @  16.10.2008,  14:07 Найти цитируемый пост)
Не могу понять в чём проблема? Посоветуйте пожалуйста.

ошибка в 18-й строке файла nmeaparser.cpp smile 

Автор: Thesame 16.10.2008, 14:54
Цитата(Lazin @ 16.10.2008,  14:43)
Цитата(Thesame @  16.10.2008,  14:07 Найти цитируемый пост)
Не могу понять в чём проблема? Посоветуйте пожалуйста.

ошибка в 18-й строке файла nmeaparser.cpp smile

Огромное спасибо за ответ, а не могли бы вы направить меня в нужное русло - как решить эту проблему?

Автор: SaDFromSpb 16.10.2008, 15:16
А зачем тебе в хедере стражи включения и pragma once одновременно? Или pragma once для чего-то другого?

Автор: Lazin 16.10.2008, 15:16
Цитата(Thesame @  16.10.2008,  14:54 Найти цитируемый пост)
Огромное спасибо за ответ, а не могли бы вы направить меня в нужное русло - как решить эту проблему? 

открой файл nmeaparser.cpp и посмотри что там написано в 18-й строке, я так понимаю ты сам хочешь найти ошибку, раз выложил только первые 14 строк файла nmeaparser.cpp, если это конечно он smile 

Автор: Alek86 16.10.2008, 15:16
ну, для начала надо подключить в nmeaparser.cpp файл NMEAParser.h

Автор: Lazin 16.10.2008, 15:17
Цитата(SaDFromSpb @  16.10.2008,  15:16 Найти цитируемый пост)
А зачем тебе в хедере стражи включения и pragma once одновременно? Или pragma once для чего-то другого? 

на случай если _MSC_VER <= 1000 smile

Добавлено через 1 минуту и 14 секунд
Цитата(Alek86 @  16.10.2008,  15:16 Найти цитируемый пост)
ну, для начала надо подключить в nmeaparser.cpp файл NMEAParser.h


Цитата(Thesame @  16.10.2008,  14:07 Найти цитируемый пост)
#include "NMEAParser.h"


конечно если это NMEAParser.срр smile 

Автор: SaDFromSpb 16.10.2008, 15:21
Цитата(Lazin @  16.10.2008,  15:17 Найти цитируемый пост)
на случай если _MSC_VER <= 1000 smile

А в противном случае будет и то и другое... Зачем? Пусть только стражи включения бы оставались.... Может его из-за этого переклинивает как-то... =)

Автор: Lazin 16.10.2008, 15:24
Цитата(SaDFromSpb @  16.10.2008,  15:21 Найти цитируемый пост)
А в противном случае будет и то и другое... Зачем? Пусть только стражи включения бы оставались.... Может его из-за этого переклинивает как-то... =) 

я все-же склоняюсь к тому, что периклинивает из-за того, что написано в 18-й строке, мне так проще smile 

Автор: MTWizard 16.10.2008, 15:31
Цитата(Lazin @  16.10.2008,  15:24 Найти цитируемый пост)
я все-же склоняюсь к тому, что периклинивает из-за того, что написано в 18-й строке, мне так проще

+1
Перевожу: "Приведи больше информации и исходников. Того, что ты выложил и рассказал, недостаточно".


Цитата(SaDFromSpb @  16.10.2008,  15:21 Найти цитируемый пост)
А в противном случае будет и то и другое... Зачем? Пусть только стражи включения бы оставались.... Может его из-за этого переклинивает как-то... =)

Не переклинивает. Студия сама такое генерит и нормально компилит - проверено

Автор: Thesame 16.10.2008, 15:42
Проблема решилась сама после доключения

Код

#include <windows.h>
#include <afx.h>


Но после подключения afx.h

выдал ошибку 1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afx.h(24) : fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

Прилепил исходники.


Автор: Lazin 16.10.2008, 16:02
Код

#pragma once

#include "GPSInfo.h"    // Added by ClassView
#include "targetver.h"


class NMEAParser  
{
public:
    NMEAParser();
    NMEAParser(LPCTSTR outputFileName);
    virtual ~NMEAParser();
    void Parse(const CHAR *buf, const UINT bufSize);
    GPSInfo& GetActualGPSInfo();

private:
    CFile m_outputFile;

    void ParseRecursive(const CHAR ch);
    void ParseNMEASentence(const CHAR *addressField, 
                           const CHAR *buf, const UINT bufSize);
    void ProcessGPGGA(const CHAR *buf, const UINT bufSize);
    void ProcessGPGSA(const CHAR *buf, const UINT bufSize);
    void ProcessGPGSV(const CHAR *buf, const UINT bufSize);
    void ProcessGPRMB(const CHAR *buf, const UINT bufSize);
    void ProcessGPRMC(const CHAR *buf, const UINT bufSize);
    void ProcessGPZDA(const CHAR *buf, const UINT bufSize);

    BOOL m_logging;
    GPSInfo m_GPSInfo;
};




Цитата(Thesame @  16.10.2008,  15:42 Найти цитируемый пост)
#include <windows.h>
#include <afx.h>

нельзя подключать одновременно, плюс
Цитата(Thesame @  16.10.2008,  15:42 Найти цитируемый пост)
выдал ошибку 1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afx.h(24) : fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

нужно добавить #define _AFXDLL
в общем
Код

#pragma once
#include <stdio.h>
#ifndef _WIN32_WINNT            // Specifies that the minimum required platform is Windows Vista.
#define _WIN32_WINNT 0x0600    // Change this to the appropriate value to target other versions of Windows.
#define AFX_NMEAPARSER_H__26C0F55B_19A8_4E71_A1BA_A2EBA169FCEB__INCLUDED_
#define _AFXDLL
#include <stdio.h> 
//#include <windows.h>
#include <afx.h>

#if !defined(_WIN32)
#error _WIN32 must be defined //error
#endif

#endif

Автор: Thesame 16.10.2008, 16:19
все проблемы решены, огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)