我已经使用一个可以显示框测量值的类编写了一些代码。我这样做是通过toString()
方法输出它似乎正在工作,但是当我运行程序时,我得到以下错误:
Height: 1 Width: 1 Depth: 1terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct null not valid
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
然后程序崩溃了。另外我注意到程序在3维后没有显示音量。
以下是代码:
#include <iostream>
#include <iomanip> // for output formatting
#include <stdexcept> // for out_of_range
#include <sstream> // for stringstream
#include <string>
#include <cstdlib> // for system()
using namespace std;
class Box
{
public:
// Constructors
Box(double height=1, double width=1, double depth=1);
// Mutators
void setHeight(double height);
void setWidth(double width);
void setDepth(double depth);
// Accessors
double getHeight() const {return (boxHeight);};
double getWidth() const {return (boxWidth);};
double getDepth() const {return (boxDepth);};
double getVolume() const;
string toString() ;
private:
double boxHeight;
double boxWidth;
double boxDepth;
double boxVolume;
};
int main()
{
cout << "\nBox Mesurement!";
cout << "\n===============";
cout << endl;
Box boxDem(true);
// WHERE THE STRING IS DISPLAYED
cout << "\n" << boxDem.toString();
cout<< endl;
cout << "\n" << boxDem.getVolume();
return 0;
}
Box::Box(double height, double width, double depth)
{
setHeight(height);
setWidth(width);
setDepth(depth);
}
void Box::setHeight(double height)
{
const double MIN = 0.01;
if (height > 0 && height < MIN)
{
height = 0.01;
boxHeight = height;
}
else if (height < 0)
{
height *= -1;
boxHeight = height;
}
else
{
boxHeight = height;
}
}
void Box::setWidth(double width)
{
const double MIN = 0.01;
if (width > 0 && width < MIN)
{
width = 0.01;
boxWidth = width;
}
else if (width < 0)
{
width *= -1;
boxWidth = width;
}
else
{
boxWidth = width;
}
}
void Box::setDepth(double depth)
{
const double MIN = 0.01;
if (depth > 0 && depth < MIN)
{
depth = 0.01;
boxDepth = depth;
}
else if (depth < 0)
{
depth *= -1;
boxDepth = depth;
}
else
{
boxDepth = depth;
}
}
double Box::getVolume() const
{
double volume = 0.0;
volume = getHeight() * getHeight() *getDepth();
return volume;
}
// WHERE THE PROBLEM IS
string Box::toString()
{
cout << "Height: " << getHeight() << " Width: " << getWidth() << " Depth: " << getDepth();
return 0;
}
答案 0 :(得分:5)
cout
用于输出内容到命令行,但是你正在编写一个应该返回string
的函数,这没什么意义。
ostringstream
是一个简洁的类,允许您使用与cout
相同的机制构建字符串,试试这个:
string Box::toString()
{
std::ostringstream result;
result << "Height: " << getHeight() << " Width: " << getWidth() << " Depth: " << getDepth();
return result.str();
}