Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将向量传递给重载类-有些call语句有效,有些则无效。_C++_Function_Class_Vector - Fatal编程技术网

C++ C++;将向量传递给重载类-有些call语句有效,有些则无效。

C++ C++;将向量传递给重载类-有些call语句有效,有些则无效。,c++,function,class,vector,C++,Function,Class,Vector,我花了大量时间在谷歌上,试图弄清楚在main调用和includes块函数之间使用.h和.cpp文件时如何传递向量。我成功地使用了类定义 现在一切都很顺利,直到我想创建一个重载函数。(我可以用两个不同的类来实现这一点,但我必须在程序中使用一个重载函数。) 这是我的writeData.h文件: #ifndef WRITEDATA_H #define WRITEDATA_H #include <vector> #include <string> #include <io

我花了大量时间在谷歌上,试图弄清楚在main调用和includes块函数之间使用.h和.cpp文件时如何传递向量。我成功地使用了类定义

现在一切都很顺利,直到我想创建一个重载函数。(我可以用两个不同的类来实现这一点,但我必须在程序中使用一个重载函数。)

这是我的writeData.h文件:

#ifndef WRITEDATA_H
#define WRITEDATA_H

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

class writeData
{
public: writeData();
public: writeData(vector<int> & DATAFILE);
public: writeData(vector<int> & DATAFILE, string); 
};
#endif
\ifndef WRITEDATA\u H
#定义写入数据
#包括
#包括
#包括
#包括
使用名称空间std;
类写数据
{
public:writeData();
公共:writeData(矢量和数据文件);
public:writeData(向量和数据文件,字符串);
};
#恩迪夫
使用名称空间std的位置;这是另一个话题

这是我的writeData.cpp文件:

#include "writeData.h"

writeData::writeData()
{
    std::cout << "Default writeData" << std::endl;
}

writeData::writeData(vector<int> & DATAFILE)
{
    cout << "writeData 1" << endl;

    for (int var : DATAFILE)
    {
        cout << var <<endl;
    }
}

writeData::writeData(vector<int> & DATAFILE, string fileName)
{
    ofstream myfile(fileName);
    cout << "writeData" << endl;
    if (myfile.is_open())
    {

        for (int var : DATAFILE)
        {
            cout << var << endl;
            myfile << var << endl;
        }
        myfile.close();
    }
}
#包括“writeData.h”
writeData::writeData()
{

当前的问题是这个声明

writeData(items);

writeData items;
因此出现了重新定义错误。更深层次的问题是,您为一个类定义了三个构造函数,并且似乎试图在不创建命名实例的情况下调用它们。要成功调用传递
项的单参数构造函数,您需要

writeData data_writer(items);
或者,您可能需要成员函数,也可能需要非成员函数。选择取决于您是否真的要对维护某些不变量的类进行建模。成员示例

class writeData
{
public: 
  void write_data() const;
  void write_data(const vector<int> & DATAFILE) const;
  void write_data(const vector<int> & DATAFILE, string) const; 
};
非成员的例子:

namespace writeData
{
  void write_data();
  void write_data(const vector<int> & DATAFILE);
  void write_data(const vector<int> & DATAFILE, string); 
};

注意:我已经对
向量
参数
常量
进行了引用,因为它们在函数中没有被moid化。

另请参见“最麻烦的解析”,谢谢!我还必须在cpp文件中添加void,如下所示void writeData::write_data()BTW在类定义中使用构造函数的结尾使用const导致了一些问题,所以在把它们取出时,所有的东西都工作得很好。在C++中,多年来不必对代码进行编码,这有助于刷新遥远的内存。
WriteData wd;
wd.write_data(items);
namespace writeData
{
  void write_data();
  void write_data(const vector<int> & DATAFILE);
  void write_data(const vector<int> & DATAFILE, string); 
};
writeData::write_data(items);