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

Mas*_*345 36 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;
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?它给了我错误:

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 ==========
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的功能.我正在使用Visual Studio 2010.

Tud*_*dor 60

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

// 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();
}
Run Code Online (Sandbox Code Playgroud)

或者宣布原型:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么把主要功能放在最后是"搞笑"?世界上什么是`public static void main()`?这与任何事情有什么关系? (13认同)
  • 如果我不得不猜测我说它的热闹的原因是它是20XX并且我们仍在使用无法解析声明的语言,那么在单独的扫描中读取定义.我觉得它并不热闹,因为我理解为什么它不可能有任何其他方式.我只是哭泣. (10认同)
  • @Juran:我认为你的意思是 `myfile &lt;&lt; var &lt;&lt; "\n";` 那会起作用。 (2认同)

Igo*_*Oks 9

main不知道writeFile(),也不能称之为.

移动writefile是之前main,或声明函数原型 int writeFile();之前main.


Mac*_*ade 6

需要声明的原型你的writeFile功能,在实际使用之前:

int writeFile( void );

int main( void )
{
   ...
Run Code Online (Sandbox Code Playgroud)

  • @RowMinds:与Java和C#相比,这一点很奇怪.如果你来自一种更加程序化的语言,那么主要是"公共"或"静态"的概念绝对是外来的. (2认同)

650*_*502 5

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

int writeFile();
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,并不总是需要事先了解被调用函数的要求。例如,对于内联定义的类成员,则不需要...

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

    int baz() {
        return 42;
    }
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,bar即使编译器依赖于baz源代码中稍后声明的函数,也可以毫无问题地分析其定义。

  • @RowMinds:C ++并不是纯白页面设计的结果,而是源于甚至通过委员会的悠久的发展历史(仅此一项就可以消除任何东西的美)。不幸的是,在很多地方,结果都是令人惊讶的,而且显然是不合逻辑的……这也意味着您在学习C ++时不能相信自己的直觉,而必须学习它。这是一门功能强大的好语言,但充满了奇怪的规则(通常出于历史原因而存在)。 (2认同)
  • @RowMinds:C ++是一种较低级的语言,主要的设计选择之一是保持足够接近金属的位置,以免在汇编器之上没有其他语言的余地。许多人认为C ++失败了(因为对于较低级别的部分,经常使用C代替C ++),但是这个决定仍然影响了很多设计。C#是一种高级语言,因此将两者进行比较并没有多大的意义。如果您只需要C#擅长的,那就去C#。 (2认同)