Странные проблемы шаблонной обработки C++

Я полагаю, что Ваше исходное предположение было корректно, я нашел, что это обычная практика для некоторых языков для добавления префикса подчеркивания к методам/участникам и т.д., которые предназначены, чтобы быть сохраненными частными к "объекту". Просто визуальный способ сказать, хотя Вы можете, Вы не должны называть это!

5
задан Mike 6 December 2012 в 13:22
поделиться

3 ответа

В вашем форвардном объявлении говорится, что llist - это класс:

class llist;

Затем вы говорите, что это шаблон:

template<typename T>
class llist;

Аналогично iter .

Я не знаю, как можно легко сделать его компилируемым. Однако вы можете сделать узел и iter «внутри» llist .

12
ответ дан 18 December 2019 в 10:47
поделиться

Есть несколько проблем.

class A;

- это не способ пересылки объявления шаблонного класса.

Если A имеет единственный шаблонный параметр, вам нужно сказать:

template<typename T>
class A;

Если вы говорите что после того, как вы уже сказали class A; , вы противоречите себе. Следующая проблема - simlar, friend class A; если шаблон A не будет работать, вам нужно сказать friend class A ; или подобное. Наконец, static_cast (argv [1]) не будет компилироваться (хотя static_cast (argv [1] [0]) будет, но все равно не хочет, чтобы вы хочу). Чтобы осмысленно преобразовать строку в целое число, вам необходимо использовать atoi , strtol , stringstream и т. Д.

2
ответ дан 18 December 2019 в 10:47
поделиться

Список не является классом. Так что предварительное объявление этого бесполезно.

template<typename T> class llist;

Попытаться скомпилировать код относительно просто.
Вы только что пропустили часть шаблона для многих типов. Найдите iter llist и node и убедитесь, что в конце они указаны подходящие.

Если вы посмотрите на STL, для простоты использования типично определить некоторые внутренние типы. Вы можете следовать тому же принципу.

template<typename T>
class llist
{
     typedef iter<T>  Iter;
     typedef node<T>  Node;

      // The rest of the code.
};
2
ответ дан 18 December 2019 в 10:47
поделиться