Как правильно пользоваться классами
От: faustment  
Дата: 08.06.02 20:09
Оценка:
У меня есть класс


#ifndef sss
#def sss

class SomeClass
{
 public:
 int somemethod(); 
   ...
 protected:
   ...
 };
 int SomeClass::somemethod()
  {
    ... 
  }

#endif



и всё это прописано , скажем в файле some.h
Скажите, как в Visual C++ 6.0 включить
этот файл чтобы не было никаких неожиданностей.

У меня было что-то вроде
файл 1.h: #include "some.h"
файл 2.h: #include "1.h"
но после таких вот нюансов
(типа в 1.h был глобальный обьект класса SomeClass)
VS писала мне какие-то ошибки.

Может посоветуете, как писать классы , чтобы
не было всяких неожиданностей.

Заранее благодарен
Дмитрий Николаев
Re: Как правильно пользоваться классами
От: Shad Россия  
Дата: 09.06.02 03:07
Оценка:
Здравствуйте faustment, Вы писали:

F>У меня есть класс



F>
F>#ifndef sss
F>#def sss
F>class SomeClass
F>{
F> public:
F> int somemethod(); 
F>   ...
F> protected:
F>   ...
F> };
F> int SomeClass::somemethod()
F>  {
F>    ... 
F>  }

F>#endif
F>



[skipped]

F>У меня было что-то вроде

F> файл 1.h: #include "some.h"
F> файл 2.h: #include "1.h"
F> но после таких вот нюансов
F> (типа в 1.h был глобальный обьект класса SomeClass)
F> VS писала мне какие-то ошибки.

IMHO дело в том, что ты прописал реализацию метода somemethod в хидере, и теперь включаешь его в проект более одного раза. Вот компилятор и ругается на то, что у тебя несколько тел для этой функции определено. В хидере должны быть только объявления, а всю реализацию надо сваливать в сорц.
Смотри мой вопрос "Как определить глобальную переменную в MFC Dll", там кажется похожая ситуация была.
Re: Как правильно пользоваться классами
От: Bell Россия  
Дата: 09.06.02 08:15
Оценка:
Здравствуйте faustment, Вы писали:

F>У меня есть класс



F>
F>#ifndef sss
F>#def sss

F>class SomeClass
F>{
F> public:
F> int somemethod(); 
F>   ...
F> protected:
F>   ...
F> };
F> int SomeClass::somemethod()
F>  {
F>    ... 
F>  }

F>#endif
F>



F>и всё это прописано , скажем в файле some.h

F>Скажите, как в Visual C++ 6.0 включить
F> этот файл чтобы не было никаких неожиданностей.

F>У меня было что-то вроде

F> файл 1.h: #include "some.h"
F> файл 2.h: #include "1.h"
F> но после таких вот нюансов
F> (типа в 1.h был глобальный обьект класса SomeClass)
F> VS писала мне какие-то ошибки.

F>Может посоветуете, как писать классы , чтобы

F>не было всяких неожиданностей.

F>Заранее благодарен

F> Дмитрий Николаев
F>

Если уж ты решил написать реализацию функции в заголовочном файле, то делай это в теле класса:

class SomeClass
{
...
public:
   int myMethod() { return 10; }
};



Или пиши реализацию в cpp — файле.
Кроме того, нельзя определять глобальную переменную в заголовочном файле. Можно писать только объявление:

extern int nGlobalVar;

А уже в каком-нибудь cpp — файле написать:

int nGlobalVar = 12345;
Любите книгу — источник знаний (с) М.Горький
Re: Как правильно пользоваться классами
От: Аноним  
Дата: 10.06.02 12:56
Оценка:
Здравствуйте faustment, Вы писали:

F>У меня есть класс



F>
F>#ifndef sss
F>#def sss

F>class SomeClass
F>{
F> public:
F> int somemethod(); 
F>   ...
F> protected:
F>   ...
F> };
F> int SomeClass::somemethod()
F>  {
F>    ... 
F>  }

F>#endif
F>



F>и всё это прописано , скажем в файле some.h

F>Скажите, как в Visual C++ 6.0 включить
F> этот файл чтобы не было никаких неожиданностей.

F>У меня было что-то вроде

F> файл 1.h: #include "some.h"
F> файл 2.h: #include "1.h"
F> но после таких вот нюансов
F> (типа в 1.h был глобальный обьект класса SomeClass)
F> VS писала мне какие-то ошибки.

F>Может посоветуете, как писать классы , чтобы

F>не было всяких неожиданностей.

F>Заранее благодарен

F> Дмитрий Николаев
F>

Попробуй сделать его inline...
F>#ifndef sss
F>#def sss

F>class SomeClass
F>{
F> public:
F> int somemethod(); 
F>   ...
F> protected:
F>   ...
F> };
F> inline int SomeClass::somemethod()
F>  {
F>    ... 
F>  }

F>#endif
Re[2]: Как правильно пользоваться классами
От: flyker Россия  
Дата: 10.06.02 13:17
Оценка:
Здравствуйте Bell, Вы писали:

B>Кроме того, нельзя определять глобальную переменную в заголовочном файле. Можно писать только объявление:


B>
B>extern int nGlobalVar;
B>

B>А уже в каком-нибудь cpp — файле написать:

B>
B>int nGlobalVar = 12345;
B>


Это не так, можно определять константы, перечисления.
Все гениальное — просто
Re[3]: Как правильно пользоваться классами
От: Bell Россия  
Дата: 10.06.02 14:34
Оценка:
Здравствуйте flyker, Вы писали:

F>Здравствуйте Bell, Вы писали:


B>>Кроме того, нельзя определять глобальную переменную в заголовочном файле. Можно писать только объявление:


B>>
B>>extern int nGlobalVar;
B>>

B>>А уже в каком-нибудь cpp — файле написать:

B>>
B>>int nGlobalVar = 12345;
B>>


F>Это не так, можно определять константы, перечисления.

Это именно так, т.к. в данном случае речь шла именно о переменной, а не о константе и не о перечислении.
Что же касается констант и перечислений — то их действительно можно определять в заголовочных файлах, и это не вызовет тех проблем, с которых все собственно и началось...
Любите книгу — источник знаний (с) М.Горький
Re: #define
От: Vi2 Удмуртия http://www.adem.ru
Дата: 11.06.02 04:12
Оценка:
Здравствуйте faustment, Вы писали:

F>У меня есть класс


F>#ifndef sss
F>#def sss
^^^^^^^^^^
F>class SomeClass
F>{
F> public:
F> int somemethod(); 
F>   ...
F> protected:
F>   ...
F> };
F> int SomeClass::somemethod()
F>  {
F>    ... 
F>  }

F>#endif


Замени #def sss на #define sss
Нет такого оператора #def
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.