Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Неужели я так плохо знаю C++, или как это можно объяснить?   Найти похожие ветки 

 
ms   (2004-12-18 10:22) [0]

//  Файл ttt.h
//
#ifndef TTT_H
#define TTT_H
class TTT {
public:
void myFunc();
int l;
private:
double c;

};
#endif

// Файл ttt.cpp
//
#include "ttt.h"

void TTT::myFunc()
{
c = 26.9;
}

// MainDlg.h : header file
//

#pragma once

#include "afxcmn.h"
#include "afxwin.h"
#include <afxmt.h>
#include "ttt.h"

<...>

// MainDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RenamerWizard.h"
#include "MainDlg.h"

Далее в этом модуле в каком-нибудь обработчике пишу:
TTT my;
my.l = 77;
my.myFunc();
-----------------
Результат компиляции:
-----------------
RenamerWizard error LNK2019: unresolved external symbol "public: void __thiscall TTT::myFunc(void)" (?myFunc@TTT@@QAEXXZ) referenced in function "public: __thiscall CMainDlg::CMainDlg(class CWnd *)" (??0CMainDlg@@QAE@PAVCWnd@@@Z)

RenamerWizard fatal error LNK1120: 1 unresolved externals

Ну в чем здесь может быть ошибка? Мой проект mfc приложения на VC++.NET


 
KSergey ©   (2004-12-18 10:43) [1]

Просто предположение:

Файл ttt.cpp не включен в проект


 
Ломброзо ©   (2004-12-18 10:43) [2]

Вставьте #include "stdafx.h" в ваш TTT.cpp

если не поможет, попробуйте не забыть написать для TTT public-конструктор


 
ms   (2004-12-18 10:49) [3]

Нельзя мне включать файл в проект, потому что одна функция(WaitForSingleObject, а то что выше это просто пример) работает неправильно если я включу файл в проект. Можно ли не включая в проект этот файл избавиться от такой ошибки?


 
Ломброзо ©   (2004-12-18 10:57) [4]

теоретически можно. А вообще, похоже, что компилятор просто ваш .cpp не видит. Включите директорию, где он лежит, в include path.


 
KSergey ©   (2004-12-18 11:32) [5]

> [4] Ломброзо ©   (18.12.04 10:57)
> теоретически можно. А вообще, похоже, что компилятор просто
> ваш .cpp не видит.

Дык и я о том же.

> [3] ms   (18.12.04 10:49)
> Нельзя мне включать файл в проект,

Т.е. это как?? Как-то мне не совсем понятно: либо файл и вписанное в него - будут в проекте и будут использоваться - либо нет.
А как именно - прописать пути (а есть ли это для файлов проекта? Чей-то я сомневаюсь, это же не дельфи) или включить в проект - код из этого модуля либо будет - либо нет. Если нет - то и использовать ничего нельзя.

А потому что-то я не пойму вашей проблемы.


 
ASMer   (2004-12-18 11:32) [6]

Засунь тело ксласса в h файл


 
KSergey ©   (2004-12-18 11:35) [7]

> [6] ASMer   (18.12.04 11:32)
> Засунь тело ксласса в h файл

Зачем?


 
begin...end ©   (2004-12-18 11:36) [8]

> [7] KSergey ©   (18.12.04 11:35)

> > Засунь тело ксласса в h файл
>
> Зачем?

За сунь :-)


 
ASMer   (2004-12-18 11:39) [9]

Так нада!


 
KSergey ©   (2004-12-18 11:49) [10]

> [9] ASMer   (18.12.04 11:39)
> Так нада!

Обман.


 
Verg ©   (2004-12-18 11:54) [11]

ну напиши так что ли...

class TTT {
public:
void myFunc() { c = 26.9; }
int l;
private:
double c;
};


 
ASMer   (2004-12-18 11:58) [12]

Короче мля самый короткий путь для того чтобы засунуть
функциональность какую то в проект VS и приэтом не включать cpp
файл в проект это засунуть эту же функциональность в h файл
а cpp выкинуть на...
Я лично встречал несколько интересных библиотек сотстоящих
из одного h файла(вариация на тему Zip и XML парсер). Очень удобно так как нет никагоко гемора при работе с этой библиотекой как в VS так и g++


 
KSergey ©   (2004-12-18 12:03) [13]

А все же, мне любопытно: почему нельзя запихнуть cpp в проект и что изменится, если всю его функциональность перенести в h? Какая в итоге разница - где лежит исходник?? Вот что я не пойму...


 
ASMer   (2004-12-18 12:15) [14]

2KSergey
Во 1-x Запихнуть можно все...
Во 2-x Ни.. чего не измениться...
Компилисться может будет дольше
В 3-x Если cpp файл не включен в проект он нескомпилиться НИКОГДА
в отличии от h.
а разници где лежит исходник нет.
Могу токак заметить по своему опыту что лучше импользовать в проекте отностительные пути, а не абсолютные.


 
KSergey ©   (2004-12-18 12:20) [15]

> [14] ASMer   (18.12.04 12:15)

Но как же тогда быть с [3] ms   (18.12.04 10:49)?? Если в тексте какие-то проблемы -какая разница куда его запихать? Вот что мне не понятно...


 
ASMer   (2004-12-18 12:24) [16]

Да мля там явно не проекте дело

Не может WaitForSingleObject работать не правильно из-за того что включен файл в проект.

А насчет продлагаемого мной пути. Так он не включает h файл в проект. Вот!


 
KSergey ©   (2004-12-18 12:43) [17]

> [16] ASMer   (18.12.04 12:24)
> А насчет продлагаемого мной пути. Так он не включает h файл
> в проект.

Да безусловно, но код-то - все равно включает. Если в коде проблемы - какая разница?
Впрочем, это не важно, думаю ;)


 
марсианин ©   (2004-12-18 12:47) [18]


> потому что одна функция(WaitForSingleObject, а то что выше
> это просто пример) работает неправильно....

а какие проблемы с WaitForSingleObject?


 
Igorek ©   (2004-12-18 13:38) [19]

KSergey ©   (18.12.04 12:03) [13]
и что изменится, если всю его функциональность перенести в h? Какая в итоге разница - где лежит исходник??

- инкапсуляция
- скорость компиляции
ms   (18.12.04 10:22)

> Результат компиляции:...

Читайте доки - они рулез.


 
KSergey ©   (2004-12-18 14:22) [20]

> [19] Igorek ©   (18.12.04 13:38)
> KSergey ©   (18.12.04 12:03) [13]
> и что изменится, если всю его функциональность перенести
> в h? Какая в итоге разница - где лежит исходник??
> - инкапсуляция

При чем тут это? Хотя ладно, подумаю еще, мож. и правда что недогоняю...

А вообще, я этот вопрос задавал исключительно в разрезе вопроса автора, а не "вообще чем отличается исходник в .h и в .cpp" ;)



Страницы: 1 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.024 c
8-1096822669
Viper
2004-10-03 20:57
2005.01.09
Управление WinAmp


1-1103667920
AlexLine
2004-12-22 01:25
2005.01.09
Как изменить координаты появления Hint


14-1103370738
Hypercube
2004-12-18 14:52
2005.01.09
Перевод C++ > Delphi


1-1103647618
Илья
2004-12-21 19:46
2005.01.09
IOResult = 103


14-1102887194
vidiv
2004-12-13 00:33
2005.01.09
Как сделать, что бы ....