[VS;C++] Как настроить, чтобы классы были целиком в файле .cpp?
Кажется, тебе скоро предложат прочитать книгу про Си++....
+1
почитай лучше книжку про С++
Наверное я слишком долго писал на java и воспоминания о С++ мутировали на этой почве
То есть так не бывает вообще?
classes.cpp:
class A
{
public:
void f { }
};
class B
{
int g { return 0; }
};
Как минимум тогда надо посылать читать книгу/доку по VS-у, а не по С++.
А так просмотрел несколько книжек - того, что именно обязательно надо использовать h-ник, не нашел - максимум - слово "обычно".
Зато нашел примеры типа этого - без h-ника.
Так что если кто может дать конкретную ссылку - было бы очень интересно просветиться.
Дык, тебе нужно, чтобы тебе твой собственный класс был в одном файле? Если да, то создаешь файл и пишешь в нем код класса, какие проблемы-то?
Как минимум тогда надо посылать читать книгу/доку по VS-у, а не по С++.Можешь и по нему тоже почитать. Хотя я редко встречал людей, которые не могут создать класс руками без визарда. File->New->Visual C++->C++ File (.cpp)
класс нормально описывать в одном файле только, если он не используется в других классах(файлах)
Так вот, переформулирую его вопрос:
---
можно ли так настроить VS, чтобы код класса не разделялся на файлы .h и .cpp, а писался только в .cpp
Если да, то как.
---
ключевое слово - VS
Это понятно, но хочется приобщиться к прелестям прогресса
А ответа на свой вопрос в msdn-е не нашел.
Если кто знает правильные ключевые слова - буду очень признателен
Ты, по ходу, вообще не в теме
Правильно, потому что вопрос твой зиждется на абсолютном непонимании структуры языка.
А ответа на свой вопрос в msdn-е не нашел.
#include "lib.cpp"?
И если я правильно понял - ответ отрицательный.
То есть если мне такое надо - надо писать класс руками.
Правильно?
Можно ссылкой (но не абстрактной - типа прочитай книгу такую-то - как-будто я их не читал, а конкретной - типа в книге такой-то раздел такой-то (а лучше с точностью до страницы.
Спасибо.
А то в половине книжек есть примеры, опровергающие твое утверждение (то есть там все в одном файле).
То есть если мне такое надо - надо писать класс руками.Да, если тебе надо написать класс в теле уже имеющегося .cpp файла, то надо руками (о, ужас!) в этот имеющийся .cpp файл написать:
class CMyClass
{
};
Компания Microsoft приносит свои извинения за такие неудобства и обещает добавить эту опцию в визард в следующем сервис паке MSVS 2005. Вместо того, чтобы просто открыть руками имеющийся .cpp файл и написать там пару строчек, можно будет открыть визард, указать там файл, в котором нужно создать класс, а затем имя класса.
"У меня будут проблемы, если я программу на Java буду писать редактром MS Word в одну строчку?"
Да, если тебе надо написать класс в теле уже имеющегося .cpp файла, то надо руками (о, ужас!) в этот имеющийся .cpp файл написать:
class CMyClass
{
};
Похоже, что это ты не в теме.
Смотри, как бы после такого тебя самого не послали читать книги по С++.
Компания Microsoft приносит свои извинения за такие неудобства и обещает добавить эту опцию в визард в следующем сервис паке MSVS 2005.
И откуда столько эмоций?
Такое ощущение, что это тебе было поручено встроить в VS эту функциональность, но ты не справился.
А кроме неудобства, какие-нибудь проблемы будут?
создать, который в одном месте используется, пиши его руками в .cpp. Простые классы типа
class MyClass
{
public:
void set(int i_) {i=i_;}
int get {return i;}
private:
int i;
};
пишутся просто в .h файлы.
Примеры в книжке простые. Тебя же не смущяет, что в книжках пропускают всякие include, using, etc. Ну вот и всякое разделение на файлы тоже могут пропустить.
Например,
//h.cpp
int i;
typedef char MyType;
//main.cpp
#include "h.cpp"
int main(int, char **)
{
MyType myvar;
return 0;
}
//2.cpp
#include "h.cpp"
MyType var2;
MyType используется в обоих main.cpp и 2.cpp, мы должны включить h.cpp в оба файла, но тогда определение int i; встретится дважды
link /nologo /OUT:main.exe main.obj 2.obj
2.obj : error LNK2005: "int i" (?@3HA) already defined in main.obj
main.exe : fatal error LNK1169: one or more multiply defined symbols found
Пиши всё в одном файле, в общем.
MyType используется в обоих main.cpp и 2.cpp, мы должны включить h.cpp в оба файла, но тогда определение int i; встретится дважды
А разве макросы типа IFDEF как раз не для этого нужны?
В них как правило все h-ники заворачиваются.
Или с cpp это не пройдет?
ньдя, может заботаешь-таки книжку "C++ для чайников"?
А здесь речь о том, что у тебя в двух файлах проекта .h включился каждый раз единожды, но в итоге ты имеешь две глобальные переменные с одинаковым именем.
В случае, если это будет класс, ты будешь иметь две реализации одного и того же класса. Компилятор такого не простит.
Похоже, что это ты не в теме.Да что ты? А ты, значит, автор boost:mpl?
Смотри, как бы после такого тебя самого не послали читать книги по С++.
И вообще, когда пишут что-то вроде
, обычно создается впечатление, что чел сам плохо понимает. что же это за такая "структура языка", но хочет показать, сколько умных слов он знает.
Правильно, потому что вопрос твой зиждется на абсолютном непонимании структуры языка.
Могу подсказать ещё одно умное слово — "прототип". Оно, как мне видится, ключевое.
Я просил такие ссылки давать конкретные.
А то твой ответ похож на пустышку.
Прежде чем советы давать, не мешало бы почитать саму тему.Тебе уже 10 раз объяснили, почему визард генерирует так, а не иначе. А так же зачем это надо. И почему никому не надо того, что ты просишь.
Я просил такие ссылки давать конкретные.
А то твой ответ похож на пустышку.
boost:mplТы про это ?
Вот и дал бы ответ на вопрос сабжа, а не общие слова, еще и как минимум неполна
Мб теперь разъяснишь смысл?
Тебе уже 10 раз объяснили, почему визард генерирует так, а не иначе. А так же зачем это надо. И почему никому не надо того, что ты просишь.
Наконец-то я получил краткий и точный ответ на вопрос субжа.
До этого ответы как правило были неконкретны и/или не по теме (хотя среди них были и очень познавательные посты).
При связывании (линковке) использованный прототип резолвится в соответствующую функцию в одном из объектников/либ — должна существовать реализация, которую можно сделать отдельным файлом.
Сори за недоформулировку темы (хотя вот же понял, о чем я) - зато узнал больше, чем ожидал.
Вдруг кому пригодится.
Оставить комментарий
durka82
Просто в книгах по С++ есть примеры, когда весь код класса содержится в одном файле.А VS генерит всегда два файла: .h и .cpp.
Можно ли это изменить.
А то как-то это ненаглядно.