2015-03-05 2 views
9

Visual Studio Выдает эту странную ошибку:«Неполный типа не допускается» при создании зОго :: ofstream объекты

Incomplete type not allowed

При попытке создать объект станда :: ofstream. Вот код, который я написал внутри функции.

void OutPutLog() 
{ 
    std::ofstream outFile("Log.txt"); 
} 

всякий раз, когда он сталкивается с этой Visual Studio, эта ошибка возникает. Почему это происходит?

+14

вы включили ' '? – Mgetz

ответ

17

Как @Mgetz говорит, вы, вероятно, забыли #include <fstream>.

Причины вы не получите ошибку not declared и вместо этого incomplete type not allowed ошибки связана с тем, что происходит, когда есть такой тип, который был "forward declared", но еще до конца не определен.

Посмотрите на этот пример:

#include <iostream> 

struct Foo; // "forward declaration" for a struct type 

void OutputFoo(Foo & foo); // another "forward declaration", for a function 

void OutputFooPointer(Foo * fooPointer) { 
    // fooPointer->bar is unknown at this point... 
    // we can still pass it by reference (not by value) 
    OutputFoo(*fooPointer); 
} 

struct Foo { // actual definition of Foo 
    int bar; 
    Foo() : bar (10) {} 
}; 

void OutputFoo(Foo & foo) { 
    // we can mention foo.bar here because it's after the actual definition 
    std::cout << foo.bar; 
} 

int main() { 
    Foo foo; // we can also instantiate after the definition (of course) 
    OutputFooPointer(&foo); 
} 

Заметьте, что мы не могли фактически создать экземпляр объекта Foo или не смотрите его содержимое до после реального определения. Когда у нас есть только доступная декларация, мы можем говорить об этом только по указателю или ссылке.

Возможно, что вы включили некоторый заголовок iostream, который аналогичным образом указывал std::ofstream. Но фактическое определение std::ofstream находится в заголовке <fstream>.


(Примечание.. В будущем обязательно обеспечить Minimal, Complete, Verifiable Example вместо одной функции из кода Вы должны предоставить полную программу, демонстрирующую проблему Это было бы лучше, например:

#include <iostream> 

int main() { 
    std::ofstream outFile("Log.txt"); 
} 

... также, "Выход", как правило, рассматривается в качестве одного полного слова, а не два, как "Выход")

Смежные вопросы