Подтвердить что ты не робот

Простая функция записи файла в С++

У меня есть этот код:

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    writeFile();
}

int writeFile () 
{
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

Почему это не работает? это дает мне ошибку:

1>------ Build started: Project: FileRead, Configuration: Debug Win32 ------
1>  file.cpp
1>e:\documents and settings\row\my documents\visual studio 2010\projects\fileread\fileread\file.cpp(8): error C3861: 'writeFile': identifier not found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

и это просто простая функция. Я использую Visual Studio 2010.

4b9b3361

Ответ 1

Существует два решения. Вы можете поместить метод выше метода, который его вызывает:

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int writeFile () 
{
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

int main()
{
    writeFile();
}

Или объявите прототип:

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int writeFile();

int main()
{
    writeFile();
}

int writeFile () 
{
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

Ответ 2

Ваш main не знает о writeFile() и не может его вызывать.

Переместить writefile до main или объявить прототип функции int writeFile(); до main.

Ответ 3

Вам нужно объявить прототип вашей функции writeFile, прежде чем использовать его:

int writeFile( void );

int main( void )
{
   ...

Ответ 4

Это место, где С++ имеет странное правило. Перед тем, как компилировать вызов функции, компилятор должен знать имя функции, возвращаемое значение и все параметры. Это можно сделать, добавив "prototype". В вашем случае это просто означает добавить до main следующую строку:

int writeFile();

это сообщает компилятору, что существует функция с именем writeFile, которая будет определена где-то, которая возвращает int и которая не принимает никаких параметров.

В качестве альтернативы вы можете сначала определить функцию writeFile, а затем main, потому что в этом случае, когда компилятор добирается до main, уже знает вашу функцию.

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

struct Foo
{
    void bar()
    {
        if (baz() != 99)
            std::cout << "Hey!";
    }

    int baz()
    {
        return 42;
    }
};

В этом случае у компилятора нет проблем с анализом определения bar, даже если он зависит от функции baz, которая объявлена ​​позже в исходном коде.

Ответ 5

Объявление функции int writeFile(); кажется, отсутствует в коде. Добавить int writeFile(); перед функцией main()

Ответ 6

Переключить порядок функций или сделать прямое объявление функции writefiles, и он будет работать, я думаю.