Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Структура проекта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Компиляция dll на win8x64 и ошибка на winXP http://www.cyberforum.ru/cpp-beginners/thread939593.html
Компилирую длл библиотеку на Windows 8 (x64), потом пытаюсь воспользоваться на windows xp и вылеатет Точка входа в процедуру GetTickCount64 не найдена в библиотеке DLL KERNEL32.dll.
C++ Альтернатива if (.) {.} (тернарный оператор) блин запамятовал как это делается пишут вместо стандартной формы что то типа y < x : x = m напомните плиз как это называется, какие там правила http://www.cyberforum.ru/cpp-beginners/thread939564.html
Проверка валидности в libxml++ C++
Подскажите, как с помощью этой библиотеки можно проверить валидность документа на соответствие XML. Вариант через исключение при создании не годится, т.к. в этом случае libxml++ выводит в поток...
C++ ошибка компиляции Code::Blocks 12.11
Доброго времени суток. Установил Code::Blocks 12.11. до этого пользовалься десятой версией. проблема в том, что компиляция не проходит, если рядом с срр-файлом лежит ехе, скомпилиованный до этого....
C++ реализация класса в .h файле хорошо или плохо? http://www.cyberforum.ru/cpp-beginners/thread939526.html
все знакомые мне ide разделяют класс на два файла: .h с описанием и .cpp с кодом, но, например, в boost .hpp файлы почти всегда содержат и реализацию классов, т.е. так тоже можно. так в чем тогда...
C++ Ошибка с полем в классе Пишу класс.Сюда его выкладывать не хочу,ибо он достаточно обширный.В классе доступе private задаю поле дескриптора файла.Тоесть что-то типо того: Class Myclass { private: HANDLE file; ...... подробнее

Показать сообщение отдельно
0x10
2463 / 1635 / 238
Регистрация: 24.11.2012
Сообщений: 4,023
18.08.2013, 07:49
Цитата Сообщение от gulejop Посмотреть сообщение
Но когда проект разрастается, начинаются проблемы.
Какие конкретно? Из поста не ясно в чем проблема.
Цитата Сообщение от gulejop Посмотреть сообщение
Приходится шаманить с pragma once
Разве это шаманство? В каждом заголовочном файле должны быть include guards или pragma once. На этом все "шманство" и заканчивается.
Цитата Сообщение от gulejop Посмотреть сообщение
предварительными объявлениями
Нет в них ничего страшного.
Цитата Сообщение от gulejop Посмотреть сообщение
указателями на классы
Кэп-mode: указатели должны быть там, где должны быть указатели. Т.е. заниматься костылевтыканием и бездумно делать указатели "лишь бы хоть как-нибудь собралось" - странно.
Цитата Сообщение от gulejop Посмотреть сообщение
экстернами
А экстерны зачем? Наплодил глобальных переменных? Если так, то серьезный повод задуматься над тем, чтобы выкосить их нафиг.
Цитата Сообщение от gulejop Посмотреть сообщение
меня одно время устраивал общий хедер куда инклудятся все другие хедеры проекта
И небольшое изменение одном из заголовочных файлов стабильно ведет к пересборке всего проекта.
Цитата Сообщение от gulejop Посмотреть сообщение
Как составляется структура папок и файлов исходников?
В общем случае использую структуру:
Код
.
|-Bin
|-Build
|-Lib
`-Projects
    |-ProjectName1
    |   |-src
    |   |-tests
    |   `PublicHeader1.h
    `-ProjectName2
Цитата Сообщение от gulejop Посмотреть сообщение
Как правильно разместить класс в файлах (например, объявление class MyClass в .h, реализация MyClass::Method() в .cpp)?
Так и размещать. Исключение - шаблоны.
Цитата Сообщение от gulejop Посмотреть сообщение
Как что куда правильнее инклудить и т.д?
Подключать заголовочный файл нужно только там, где он действительно необходим. Где можно обойтись предварительным объявлением - его и использовать.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//! @file MyClass.h
#pragma once
 
#include "Base.h"
#include "Bar.h"
 
class Foo;
 
// Наследование - необходимо подключить Base.h
class MyClass : public Base
{
public:
    MyClass();
    ~MyClass();
 
public: // Base
    virtual void f();
 
private:
    Foo* foo_; // указатель. Достаточно предварительного объявления.
    Bar bar_; // необходимо подключить Bar.h
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//! @file MyClass.cpp
 
#include "MyClass.h"
 
#include "Foo.h"
 
MyClass::MyClass()
: foo_{new Foo()}
{ }
 
MyClass::~MyClass()
{
    delete foo_;
}
 
void MyClass::f()
{
    foo_->g(); // используется метод класса Foo, необходимо подключить Foo.h
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru