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


Автор: _RIKOSHET_ 24.7.2007, 17:31
У меня проблема с реализацией класса, вот:

Код


/////   new1.h    /////
class N
{
public: 
    void deal();
};



/////   new2.cpp    /////
#include <stdio.h>
#include <conio.h>
#include "new1.h"

void N::deal()
{
    printf("deal");
}


/////   new.cpp    /////
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "new1.h"

void main()
{
    N f;
    f.deal();
}


При запуске выдает 2 ошибки и я никак не могу понять в чем дело. 
Подскажите что не так.

Ошибка    1    error LNK2019: unresolved external symbol "public: void __thiscall N::deal(void)" (?deal@N@@QAEXXZ) referenced in function _main    new.obj

Ошибка    2    fatal error LNK1120: 1 unresolved externals    C:\Documents and Settings\Артур\Мои документы\Visual Studio 2005\Projects\new\Debug\new.exe    1


Все файлы в одной папке.

Автор: Daevaorn 24.7.2007, 17:33
Цитата(_RIKOSHET_ @  24.7.2007,  18:31 Найти цитируемый пост)
Все файлы в одной папке.

и в одном проекте?

Автор: _RIKOSHET_ 24.7.2007, 17:58
Daevaorn,  ну конечно!!!
компилятор - VS2005

Автор: Programister0 24.7.2007, 18:29
возможно в stdafx.h что то лишнее прописано
попробуй убери эту строчку
#include "stdafx.h" 
и проверь включён ли в проект new2.cpp. 

Автор: Daevaorn 24.7.2007, 18:29
Цитата(_RIKOSHET_ @  24.7.2007,  18:58 Найти цитируемый пост)
ну конечно!!!

тогда сходи в церковь, т.к. всё должно нормально собираться. а лучше проверь,действительно ли new2.cpp подключен к проекту

Автор: Programister0 24.7.2007, 18:31
без 
#include "stdafx.h" 
у меня все работает

Автор: boriska 24.7.2007, 18:35
Может нужно подключить stdafx.h в new2.cpp

Автор: _RIKOSHET_ 24.7.2007, 19:22
Упс - а ведь действительно не был подключен.
 smile  smile  smile  smile  smile  smile 

Автор: FiMa1 25.7.2007, 09:44
В stdafx.h следует включать часто используемые, но редко изменяемые (редактируемые) файлы. Начальное его содержимое:
Код
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here

Файл stdafx.cpp ответственен за создание перекомпилированных заголовков (precompiled headers), он содержит единственную строку #include "stdafx.h".
Файлы, подключенные через stdafx.h компилируются один раз при первой компиляции, а в последующем будут обрабатываться в уже скомпилированном виде.
Если проект изначально был создан с использованием прекомпилированных заголовков и затем в уже существующий проекту добавлялись новые файлы, то 
* Если добавляемый файл не нужно компилировать каждый раз (к примеру, файл создан кем-то другим и его не нужно редактировать), то необходимо подключить в него stdafx.h выше подключения всех остальных файлов, добавить в самый верх данного модуля.
* В противном случае, можно отключить опцию Использование Прекомпилированных заголовков (Create/Use Precompiled Headers). Project::Properties::Precompiled Header::Create/Use Precompiled Headers->Not Using Precompiled Headers.
Более подробно смотрим здесь:
http://www.cygnus-software.com/papers/precompiledheaders.html

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