C ++中的简单文件写入功能

时间:2012-01-14 16:20:41

标签: c++

我有这段代码:

// 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。

6 个答案:

答案 0 :(得分:55)

这有两个解决方案。您可以将方法放在调用它的方法之上:

// 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;
}

答案 1 :(得分:9)

您的main不了解writeFile(),也无法拨打电话。

writefile移至main之前,或在int writeFile();之前声明function prototype main

答案 2 :(得分:6)

在实际使用之前,您需要声明writeFile函数的原型

int writeFile( void );

int main( void )
{
   ...

答案 3 :(得分:3)

这是一个C ++有一个奇怪规则的地方。在能够编译对函数的调用之前,编译器必须知道函数名,返回值和所有参数。 这可以通过添加“原型”来完成。在您的情况下,这只是意味着在main之前添加以下行:

int writeFile();

这告诉编译器存在一个名为writeFile的函数,该函数将在某处定义,返回int并且不接受任何参数。

或者你可以先定义函数writeFile然后再定义main,因为在这种情况下,当编译器到达main时已经知道你的函数。

请注意,并不总是应用这种预先知道被调用函数的要求。例如,对于内联定义的类成员,它不是必需的......

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

    int baz()
    {
        return 42;
    }
};

在这种情况下,编译器在分析bar的定义时没有问题,即使它依赖于稍后在源代码中声明的函数baz

答案 4 :(得分:1)

函数声明int writeFile();似乎在代码中缺少。 添加int writeFile();在函数main()

之前

答案 5 :(得分:0)

切换函数的顺序或执行writefiles函数的前向声明,我认为它会起作用。