Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.217.134] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Привет всем!
Есть у меня заголовочный файл. В нём описан класс по типу: class A { public: void superFunction(someType a); }; Так вот этот someType объявлен в некотором другом заголовочном файле, который мне бы хотелось подключать в *.cpp, а не в заголовочном. Я думал может быть есть на этот случай что-то по типу external ключевого слова, но для типов. Для чего это надо? чтоб не таскать за собой лишние заголовочные файлы, когда проект поставляется в виде заголовочного файла без файлов реализации + статичная библиотека lib. Есть ли такая вещь в С++? Спасибо большое заранее. |
Сообщ.
#2
,
|
|
|
Forward declaration?
|
Сообщ.
#3
,
|
|
|
Цитата zhe123 @ Forward declaration? Ёмко. Как посмотрел, вспомнил. Спасибо! |
Сообщ.
#4
,
|
|
|
И как будет выглядеть решение?
Напишите, чтоб ньюбы ( такие как я ) увидели |
Сообщ.
#5
,
|
|
|
// .h class someType; // forward declaration class A { public: void superFunction(someType* p); // указатель или ссылка // (хотя, помоему, 8 студия уже разрешает передавать по значению) }; // .cpp #include "someType.h" void A::superFunction(someType* p) { } |
Сообщ.
#6
,
|
|
|
форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a);
|
Сообщ.
#7
,
|
|
|
Этот вопрос легко решается:
superFunction(const someType& a); |
Сообщ.
#8
,
|
|
|
|
Сообщ.
#9
,
|
|
|
Цитата BlackEmperor @ форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a); Не, объявлению функции знание размера аргумента не требуется. |
Сообщ.
#10
,
|
|
|
Цитата BlackEmperor @ форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a); Да, совершенно правильно. Мне и не подошло к сожалению. Цитата =MOHAX= @ superFunction(const someType& a); Мне именно хотелось бы на стеке передовать свою копию переменной в функцию, т.к. там функция рекурсивная. |
Сообщ.
#11
,
|
|
|
Цитата experimenter @ Да, совершенно правильно. Мне и не подошло к сожалению. Значит, ты что-то не так делаешь, ибо всё должно работать. |
Сообщ.
#12
,
|
|
|
А обертка над рекурсивной функцией не подойдет?
|
Сообщ.
#13
,
|
|
|
Цитата zhe123 @ А обертка над рекурсивной функцией не подойдет? А зачем? |
Сообщ.
#14
,
|
|
|
Для того, чтобы в обертку передавать по константной ссылке, а в рекурсивной функции - на стеке
|
Сообщ.
#15
,
|
|
|
Цитата Unreal Man @ Значит, ты что-то не так делаешь, ибо всё должно работать. Вполне может быть. Покажу, как там всё устроено. Есть некий класс, в котором определена функция по типу: class MyxClass { public: real_1d_array DoSomething( real_1d_array xo); } Так вот, проблема в этом типе real_1d_array. Он определён в некотором файле вот так: typedef template_1d_array<double> real_1d_array; У меня подозрения, что проблема в typdef. template_1d_array<double> же определён в том же описательном файле, где и template_1d_array. Добавлено Цитата zhe123 @ Для того, чтобы в обертку передавать по константной ссылке, а дальше на стеке Так, а ту функцию, которой на стеке передавать, её же тоже описывать надо в том же заголовочном файле, т.е. придём к той же самой задаче, если я правильно понимаю. |