我有这段代码:
// 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。
答案 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函数的前向声明,我认为它会起作用。