C++将向量传递给重载类——有些调用语句有效,有些则无效
C++ Passing vectors to an overloaded class - some call statements work, some do not.
我在谷歌花了很多时间,试图弄清楚在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
使用命名空间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);
任何在线文章的帮助或指针都将不胜感激。
直接的问题是这个声明
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
,因为它们在函数中没有被移动。
相关文章:
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在 COUT 语句中使用 COUT 调用函数
- 调用多个类而不带 if 语句
- 错误:调用 .. at return 语句时没有匹配函数
- 在可变函数调用中执行一次语句
- 在 if 语句中调用重载构造函数失败
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 如果语句表达式调用函数,则需要测试是否为 true
- return 语句,该语句调用在返回 void 的函数中返回 void 的函数
- C++ While(1) 循环内部没有调用 if 语句
- 一个关于在函数中运行未调用语句的非常奇怪的错误
- 为什么我要尝试在一个if语句中调用两个fucntions,但是在第一个完成后它忽略了另一个功能?(C )
- 在返回语句中调用默认构造函数
- 有没有办法查看此语句"Student s3=func(s1, s4)"将调用哪个构造函数?
- 是否可以在一个语句中创建对象并调用方法?
- SQLite3_exec回调未使用c++中的INSERT语句调用
- 从 'if' 语句和 'switch' 语句调用函数
- 语句调用构造函数,但对构造函数不做任何操作——为什么它不能编译
- 为什么不为语句调用 A 的构造函数"A x(A())"?
- 递归返回 if 语句调用