头文件中的C ++数组

时间:2011-04-30 13:18:40

标签: c++ arrays header-files

我正在进行训练,并且无法开始训练。我必须编写一个数组数据结构的程序。提供了测试工具,我需要实现数据结构的代码。我不知道如何在头文件中定义数组

bellow是我无法编辑的测试工具main.cpp

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


// *****************************
// you need to create this class
// *****************************
#include "ArrayIntStorage.h"


int main(int argc, char **argv) {
// ***********************************
// non-sort read & then sort using std
// ***********************************
ifstream fin1("ACW2_data.txt");
ofstream out1("1-arrayUnsortedRead.txt");
//ofstream out2("2-arrayUnsortedRead-thenSTDSort.txt");

if(!fin1.is_open()) 
{
    cout << "FAIL" << endl;
    return 1;
}

ArrayIntStorage arrayStorage1;
arrayStorage1.setReadSort(false);   // do not read sort

// read in int values into data structure
fin1 >> arrayStorage1;

// output int values in data structure to file
out1 << arrayStorage1;

// sort data structure using std
arrayStorage1.sortStd();

// output int values in data structure to file
out2 << arrayStorage1;

fin1.close();
out1.close();
out2.close();

有关头文件的任何信息以及如何将它们与此主文件一起使用将非常感激

Merci beaucoup

3 个答案:

答案 0 :(得分:2)

头文件ArrayIntStorage应如下所示: -

功能签名可能会根据用途而改变: -

// ArrayIntStorage.h - header file

class ArrayIntStorage
{

   public :

    ArrayIntStorage();  // this is the constructor
                        // You may skip this constructor, and use the default one 

    void setReadSort(bool bSort);
    void sortStd()

  // Add any public members if needed

   private :

    // Add any private members/ functions if needed

}

答案 1 :(得分:2)

我很确定你应该创建ArrayIntStorage.h头并实现匹配的ArrayIntStorage.cpp。

基于“//使用std排序数据结构”注释,您需要使用并在适当的stl容器上创建一个包装器,类似于std :: vector。

根据“// do not read sort”注释,默认情况下,您应该在每次插入后对向量进行排序(当然,除非有人在您的包装器上调用setReadSort(false))。

除了上述界面,您还需要实现&gt;&gt;和&lt;&lt;。

更新。

C++ pass variable from .cpp to header file读你的问题,你似乎对这一切感到困惑......

首先,添加对&gt;&gt;的支持和&lt;&lt;操作符:

您可以在.h文件中声明这些运算符来执行此操作:

friend std::ostream& operator<<(std::ostream &out, const ArrayIntStorage &a);

friend std::ifstream & operator>>(std::ifstream &, ArrayIntStorage &);

然后在.cpp文件中定义它们的实现:

std::ostream& operator<<(std::ostream &out, const ArrayIntStorage &a)
{ return out; }

std::ifstream & operator>>(std::ifstream &, ArrayIntStorage &)
{ return in; }

显然,你需要在那里添加一些正确的代码,这只是为了让它编译。 如果它仍然无法编译,请检查您是否在.h文件中包含了流标题:

#include <fstream>
#include <iostream>

现在提供一些一般信息:

您的数组存储应该基于std :: vector之类的东西。 &gt;&gt;的目的和&lt;&lt;您需要实现的功能是从该容器中添加和检索int。

由于ArrayIntStorage是一个类,一旦你建立了你需要的接口(.h文件中的公共成员函数),你应该只看.h和.cpp来充实实现。

一旦完成,你不需要任何“外部”疯狂,你的另一个问题的答案说。 看看你的主要功能。如果创建了类的对象和fin1流。然后它调用&gt;&gt;你实施的运营商。所有这些都是通过局部变量完成的。

这就是你如何“使用main.cpp中此变量的值”。您可以使用该变量作为参数调用类的成员函数。

最后,如果您在理解标题文件和链接错误时遇到所有这些问题,您确定已开始进行适当的培训吗?

答案 2 :(得分:1)

马克,

http://www.cplusplus.com/doc/tutorial/(我在评论中提到过)让我们失望了。他们不会将标题文件作为主题直接说明......但是http://www.learncpp.com/cpp-tutorial/19-header-files/会这样做。

基本上,头文件定义了类的“接口”。它被放在一个单独的文件中,以便您的类的用户可以在代码中包含JUST这个“接口定义”...例如,像#include "ArrayIntStorage.h"。这允许编译器确定它们是否有错误,例如拼写错误的方法名称,或传递错误类型的参数......你知道,你看到的所有编译器错误......是吗? / p>

所以你定义你的类在.h文件中做了什么...然后在.cpp文件中定义它是如何做的。

这有意义吗?

干杯。基思。