Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   ООП в с++ (http://mangos.ytdb.ru/showthread.php?t=6231)

lovepsone 28.09.2012 14:45

ООП в с++
 
У меня в файле class1.cpp создан класс к примеру:
Код:

class ad
{
  переменные...;

public:
  void c(параметры какие то...);
}

ad::ad()
{
 какие-то действия...
}

void c(параметры какие то...)
{
  какие-то действия...
}

В файле main.cpp хочу присвоить этот класс переменной, т.е:
Код:

void main()
{
  ad g;
далее действия с переменной g
}

но компилятор выдает ошибку типа
Цитата:

Ошибка ad: необъявленный идентификатор
Где его объявлять то надо?
И еще вопрос: в коде мангоса я замечал такую конструкцию к примеру:
Код:

Master::Master()
{
}

Master::~Master()
{
}

Что значит ~?

Evgeniy 28.09.2012 15:12

Цитата:

Сообщение от lovepsone (Сообщение 29582)
И еще вопрос: в коде мангоса я замечал такую конструкцию к примеру:
Код:

Master::Master()
{
}

Master::~Master()
{
}

Что значит ~?

Destructor

Amaru 28.09.2012 15:43

Цитата:

но компилятор выдает ошибку типа
#include "class1.cpp"

?

lovepsone 28.09.2012 15:59

Если написать функцию в файле class1.cpp вне класса и вней создать такую переменную, то компилятор компилирует. А как создать эту переменную в в другом .cpp файле?




в файле class1.cpp
Цитата:

#include "class1.h"
и в файле main.cpp
Цитата:

#include class1.h
так ж в файле class1.h прописано
Код:

class ad;

так что тут все правильно походу. Файлы .cpp нельзя инклудить, так как они не являются заглавными.


p.s. пойду ка я пока покурю книгу...


почитав книгу нечего такого не нашел, как же все таки реализовать
Код:

ad g;
кое что надыбал в инете msdn.microsoft.com и проблему свою решил! Можете тему в корзину. Всем спасибо...

zergtmn 28.09.2012 16:47

Цитата:

Сообщение от lovepsone (Сообщение 29585)
Файлы .cpp нельзя инклудить, так как они не являются заглавными.

можно

LordJZ 28.09.2012 17:20

Цитата:

Сообщение от zergtmn (Сообщение 29586)
можно

но лучше так не делать без хорошей на то причины

lovepsone 28.09.2012 19:02

Цитата:

Сообщение от zergtmn (Сообщение 29586)
можно

в коде мангоса на сколько я знаю так никогда не инклудилось....

Den 28.09.2012 22:31

Лучше будет описать класс ad в .h файле. И проблема сама решится с инклудом .cpp файла.

LordJZ 29.09.2012 00:08

Цитата:

Сообщение от lovepsone (Сообщение 29588)
в коде мангоса на сколько я знаю так никогда не инклудилось....

Дело в том, что по конвенции (гласной или не гласной — я, правда, не знаю) *.c* (.c, .cc, .cp, .cpp, .cxx и другие) файлы служат точкой входа для очередного запуска компилятора, который инклудит заголовочные файлы, почти не содержащие символов, а на выходе отдает объектный файл с символами именно этого *.c* файла. Мангос более-менее следует этой конвенции.
Именно с таким подходом по-умолчанию работает gcc, под этот режим пишутся Makefile-ы, так Visual Studio с незапамятных времён автоматически выбирает дефолтные роли файлов в проекте.

Однако объединённые силы языка С (или С++) и компилятора позволят вам «выстрелить в ногу» — сделать всё по-своему и сказать, что компилировать ваш любимый компилятор будет один файл cc.entry, а в этом файле будут #include-ы всех остальных файлов проекта, какое бы они расширение ни имели.

Иногда такой подход имеет место быть. Безобидным примером использования является система быстрой компиляции, ускоряющая этот длительный процесс за счёт снижения количества чтения этих самых заголовочных файлов. Согласно методике, в одном-единственном на весь проект компилируемом файле содержатся #include-ы всех других файлов проекта, подлежащих компиляции на текущем языке программирования.

Достаточно хаковым, но, тем не менее, существующим методом «быстрой» статической линковки с отдельными символами библиотеки с открытым исходным кодом является #include *.c* файла библиотеки.

Но, опять же, я настоятельно рекомендую не прибегать к таким ухищрениям.


Текущее время: 11:35. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS