C++ 将向量传递给重载类 - 有些调用语句有效,有些则无效。
Posted
技术标签:
【中文标题】C++ 将向量传递给重载类 - 有些调用语句有效,有些则无效。【英文标题】:C++ Passing vectors to an overloaded class - some call statements work, some do not. 【发布时间】:2015-03-19 06:19:36 【问题描述】:我在谷歌上花了很多时间试图弄清楚如何在 main 中的调用和包含块中的函数之间使用 .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
使用命名空间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();
这是我的主要功能:
#include <iostream>
#include <vector>
#include <string>
#include "writeData.h"
using namespace std;
int main()
string fileName = "test.txt";
vector<int> items 10, 14, 22, 34 ;
writeData();//default
///////////////////////////////////////////////////
// the next line is the problem code:
//writeData(items);//writes to screen only
//<<When I uncomment it the compiler Tosses the following:
// 'items': redefinition; different basic types
////////////////////////////////////////////////////
writeData(items, fileName);//writes to screen and to file
cin.ignore();
cin.get();
违规行是 writeData(items);
任何在线文章的帮助或指点将不胜感激。
【问题讨论】:
另见Wikipedia“最令人头疼的解析” 【参考方案1】:当前的问题是这个声明
writeData(items);
与
相同writeData items;
因此重定义错误。更深层次的问题是您为一个类定义了三个 构造函数,并且似乎试图在不创建命名实例的情况下调用它们。要成功调用传递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;
;
然后
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);
请注意,我已将 vector<int>
参数 const
引用,因为它们没有在函数中被修改。
【讨论】:
谢谢!我还必须在 cpp 文件中添加 void,如下所示 void writeData::write_data() 等。顺便说一句,在类定义中的构造函数末尾使用 const 会导致一些问题,因此将它们取出时一切正常。多年来不必使用 C++ 编写代码,这有助于刷新遥远的记忆。以上是关于C++ 将向量传递给重载类 - 有些调用语句有效,有些则无效。的主要内容,如果未能解决你的问题,请参考以下文章