Я создаю DLL в C ++, но это дает мне постоянную ошибку - PullRequest
0 голосов
/ 02 февраля 2012

Я создаю DLL, используя код, предоставленный нам моим инструктором.Однако я попытался скомпилировать его дома, и это не похоже на работу.Любая помощь будет оценена.

template<class T>
class mySTLlist : public list<T> {
public:
    void addInMiddle(T t){}

    friend ostream& operator<<(ostream& out,  mySTLlist<T>& lst) {
        for(mySTLlist<T>::iterator i = lst.begin(); i != lst.end(); i++)
            out << *i << ' ';
        out << '\n';
        return out;
};

Это дает мне ошибку на:

mySTLlist<T>::iterator i = lst.begin(); 

Он говорит, что мне нужно ;, прежде чем оно не объявлено.Я относительно новичок в C ++

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Это хорошая иллюстрация того, почему важно включить пример complete , а также прочитать все сообщения об ошибках.В вашем коде отсутствуют некоторые заголовки;как минимум, в верхней части нужно следующее:

#include<list>
#include<iostream>
using namespace std;

Когда я исправляю их и добавляю отсутствующий } в конце и компилирую, я получаю три ошибки:

foo.cpp:14:9: error: need 'typename' before 'mySTLlist<T>::iterator' because
'mySTLlist<T>' is a dependent scope
foo.cpp:14:32: error: expected ';' before 'i'
foo.cpp:14:49: error: 'i' was not declared in this scope

Первый говорит, что нам нужно добавить «typename» (обратите внимание, что это в кавычках, что означает буквальное ключевое слово typename, а не имя типа), поэтому мы добавляем именно то, что нам нужно, изменяяэта строка в:

for(typename mySTLlist<T>::iterator i = lst.begin(); i != lst.end(); i++)

Это решает проблему.Ошибка, которую вы видите, является последующей ошибкой - поскольку объявление i было ошибочным, оно пропустило его, чтобы посмотреть, что оно может сделать с остальной частью файла.В следующий раз, когда вы используете i, он жалуется, что он не был объявлен (что, конечно, потому что пропустило объявление) - и, аналогично, пропущенная ошибка ; вызвана тем, как он пропускаетта первая ошибка.Итак, исправьте проблему first , и это исправит все остальное.

1 голос
/ 02 февраля 2012

Вы должны добавить итератор typedef:

typedef typename mySTLlist<T>::iterator myListIter;

и затем написать:

friend ostream& operator<<(ostream& out,  mySTLlist<T>& lst) {
    for(myListIter i = lst.begin(); i != lst.end(); i++)
        out << *i << ' ';
    out << '\n';
    return out;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...