文件和fsream作为参数

时间:2016-02-02 08:18:52

标签: c++

我的课程包含2个功能;一个用于设置用户数据,另一个用于将此数据写入文件。

这是头文件:

class MyClass
{
public:
    void setData(string);
    void write(fstream&);

private:
    string data;
};

MyClass.cpp

#include "MyClass.h"
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

void MyClass::setData(string input)
{
    data = input;
}

void MyClass::write(fstream &outfile)
{
    outfile << data << endl;
}

这是主要功能:

#include"MyClass.h"
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

void main()
{
    MyClass ob;
    string input; 
    fstream ofile("D:/Blank.txt", ios::out);
    cout << "Enter the data .... " << endl;
    getline(cin, input);
    ob.setData(input);
    ob.write(ofile);

}

它总是给我语法错误和其他一些错误,我无法弄清楚这段代码的错误在哪里,我知道我在不使用类的情况下尝试了这段代码并且运行良好。

错误讯息:

Error   2   error C2061: syntax error : identifier 'fstream'    c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  6   1   Files
Error   8   error C2061: syntax error : identifier 'fstream'    c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  6   1   Files
Error   1   error C2061: syntax error : identifier 'string' c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  5   1   Files
Error   7   error C2061: syntax error : identifier 'string' c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  5   1   Files
Error   12  error C2065: 'data' : undeclared identifier c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.cpp    9   1   Files
Error   14  error C2065: 'data' : undeclared identifier c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.cpp    14  1   Files
Error   3   error C2146: syntax error : missing ';' before identifier 'data'    c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  9   1   Files
Error   9   error C2146: syntax error : missing ';' before identifier 'data'    c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  9   1   Files
Error   11  error C2511: 'void MyClass::setData(std::string)' : overloaded member function not found in 'MyClass'   c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.cpp    8   1   Files
Error   13  error C2511: 'void MyClass::write(std::fstream &)' : overloaded member function not found in 'MyClass'  c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.cpp    13  1   Files
Error   5   error C2660: 'MyClass::setData' : function does not take 1 arguments    c:\users\ahmed\documents\visual studio 2013\projects\files\files\main.cpp   14  1   Files
Error   6   error C2660: 'MyClass::write' : function does not take 1 arguments  c:\users\ahmed\documents\visual studio 2013\projects\files\files\main.cpp   16  1   Files
Error   4   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  9   1   Files
Error   10  error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\ahmed\documents\visual studio 2013\projects\files\files\myclass.h  9   1   Files

1 个答案:

答案 0 :(得分:0)

问题:在你的MyClass.h中,你使用的是你不包含的课程。将它们包含在MyClass.h中

MyClass.h:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

class MyClass
{
public:
    void setData(string);
    void write(fstream&);

private:
    string data;
};

在MyClass.cpp中,您不需要包含它们,只需要包含MyClass.h。

MyClass.cpp:

#include "MyClass.h"

void MyClass::setData(string input)
{
    data = input;
}

void MyClass::write(fstream &outfile)
{
    outfile << data << endl;
}

我不确定你为什么要返回void,但这可能是问题的根源,具体取决于你的编译器。在我的计算机中,我使用了g ++,这是一个问题。我必须将其更改为返回int并最后添加return 0;。也许你也可以。

Main.cpp的

#include"MyClass.h"
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

int main()
{
    MyClass ob;
    string input; 
    fstream ofile("D:/Blank.txt", ios::out);
    cout << "Enter the data .... " << endl;
    getline(cin, input);
    ob.setData(input);
    ob.write(ofile);
    return 0;
}

现在,它可以工作,因为它在我的电脑上工作。 :)