Проблема предописания C++

У меня есть заголовочный файл, который имеет некоторые предописания, но когда я включаю заголовочный файл в файл реализации, он включен после включения для предыдущих предописаний и это приводит к ошибке как это.

error: using typedef-name ‘std::ifstream’ after ‘class’
/usr/include/c++/4.2.1/iosfwd:145: error: ‘std::ifstream’ has a previous declaration.

class ifstream;

class A
{
    ifstream *inStream;
}
// End of A.h

#include <ifstream>
using std::ifstream;

#include "A.h"

// etc

Какова норма для работы вокруг этого?

Заранее спасибо.

12
задан Thomas 3 June 2010 в 04:52
поделиться

6 ответов

Не пересылать объявление std: ifstream - вместо этого просто импортируйте .

ifstream - это typedef.

Подробнее см. Здесь: http://gcc.gnu.org/on Lineocs/libstdc++/libstdc++-html-USERS-4.2/group__s27__2__iosfwd.html

23
ответ дан 2 December 2019 в 05:14
поделиться

Сделайте следующее (если вы уже включили файл заголовка std перед своим, больше не нужно пересылать объявление):

В вашем файле cpp:

#include <iostream>
#include "a.h"    

В вашем файле ah:

using namespace std;
class A {
  ifstream *instream;

};
-1
ответ дан 2 December 2019 в 05:14
поделиться

Как вы форвардом заявили об этом? Проблема может заключаться в том, что std :: ifstream является typedef , а не классом.

2
ответ дан 2 December 2019 в 05:14
поделиться

На самом деле у вас две проблемы.

Во-первых, как уже указывал Кирилл, прямое объявление typedef в C ++ довольно сложно.

Во-вторых, ifstream - это определение типа для конкретного экземпляра шаблона basic_ifstream - чтобы компилятор мог расширить шаблон, он должен уже иметь тело определенного шаблона, то есть вы не можете пересылать объявление созданного шаблона.

2
ответ дан 2 December 2019 в 05:14
поделиться

Если вы хотите перенаправить объявление некоторых классов iostreams, вы можете просто включить . Этот заголовок содержит предварительные объявления для этих классов.

1
ответ дан 2 December 2019 в 05:14
поделиться

Вам не хватает точки с запятой после определения класса A.

1
ответ дан 2 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: