【发布时间】:2020-05-16 15:13:53
【问题描述】:
我试图从 b 类调用 a 类的成员,但它没有成功,但它总是为 a 类中的向量提供垃圾值,是的,第三次抛出异常,而读取循环只应该只运行 2 次。
b.h
#pragma once
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iomanip>
#include "a.h"
using namespace std;
class b {
fstream fio;
string s;
a aio;
public:
b(string);
b( b& );
void all(string);
void out();
void reset();
~b();
};
b.cpp
#include "b.h"
b::b(string in)
:fio{ "see.bin",ios::in | ios::out | ios::binary | ios::app }, s{ in }
{
}
b::b( b& bi )
: fio{ "see.bin",ios::in | ios::out | ios::binary | ios::app }, s{ bi.s }
{
}
void b::all(string in) {
s = in;
reset();
aio.set_n( s ); //n is a string in a class
aio.set_s( 11 ); // s is a size_t object in a class
aio.set_v( 114 ); // v is the vector in a class
fio.write( ( char* )&aio, sizeof( aio ) );
reset();
}
void b::out() {
reset();
while (fio.read( ( char* )&aio, sizeof( aio ) //read function gone rouge
aio.print();
}
void b::reset() {
fio.clear();
fio.seekg( 0, ios_base::beg );
}
b::~b() {
fio.close();
}
main.cpp
#include "b.h"
int main() {
b obj_1( "" );
obj_1.all( "xyz" );
obj_1.out();
}
a.cpp
#include "a.h"
a::a()
:s{ 0 }
{
}
a::a( a& ai )
: s{ ai.s }, n{ ai.n }
{
for (auto c : ai.v)
v.push_back( c );
}
a::a( a&& ai ) noexcept
:s{ ai.s }, n{ ai.n }
{
for (auto c : ai.v)
v.push_back( c );
ai.v.clear();
}
void a::set_v( int i ) {v.push_back( i );}
void a::set_s( size_t si ) { s = si;}
void a::set_n( string na ) {n = na;}
void a::print(){
cout << s << " " << n << " ";
for (int &p : v)
cout << " " << p;
}
a::~a() {v.clear();}
作为参考,a 是一个具有复制构造函数、移动构造函数、普通构造函数、每个对象的所有设置器和一个析构函数的类。 感谢您帮助我并阅读我写得很糟糕的代码。
【问题讨论】:
-
a的定义在哪里?请发minimal reproducible example。 -
我会尽我所能保持它尽可能简短我添加了 a 的定义,如果需要,请告诉我你是否也需要 .h 文件
标签: c++ class vector fstream member-functions