Qt程序中的值丢失,类输出错误

时间:2015-02-28 13:22:57

标签: c++ qt class output

我得到了Qt作业,我似乎无法开始工作。

这里是作业说明:

  

使用名称,价格和供应商描述产品。该   供应商和制造商对于产品可以是相同的。

     

使用名称和价格初始化Product。供应商详细信息使用函数setSupplier()设置,该函数调用   适当的Vendor功能来设置供应商的详细信息。如果   一个为其制造商请求产品,它返回的名称   供应商存储在m_Supplier中,如果它被设置为制造商。   否则返回Unknown字符串。 toString()的{​​{1}}   返回其中数据成员的值的字符串表示形式   可读格式。 Vendor的{​​{1}}始终返回一个字符串   产品的代表。如果toString()中的Product   supplierDetailstoString(),它会返回供应商和产品详细信息。   否则只返回产品详细信息。

     

将其实现为控制台应用程序,产品和suuplier   从键盘输入详细信息。显示结果   Producttrue(适用于getManufacturerName()toString()   控制台上的参数值。

不幸的是,我真的无法找到我在哪里出错,所以我会将我所有文件的所有代码都放在下面,希望有人能够发现出错的地方。

的main.cpp

true

product.h

false

product.cpp

#include <QCoreApplication>
#include "vendor.h"
#include "product.h"
#include <QString>
#include <QTextStream>
#include <QDebug>

QTextStream cout(stdout);
QTextStream cin(stdin);  

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //Declare variables
    QString productName;
    QString productPriceStr;
    double productPrice;
    QString supplierName;
    QString supplierEmail;
    QString supplierIsManufacturerStr;
    bool supplierIsManufacturer;

    //Get user input
    cout << "Enter the product name:" << endl;
    productName = cin.readLine();
    cout << "Enter the product price:" << endl;
    productPriceStr = cin.readLine();
    cout << "Enter the supplier name:" << endl;
    supplierName = cin.readLine();
    cout << "Enter the supplier email:" << endl;
    supplierEmail = cin.readLine();
    cout <<"Is the supplier a manufacturer (y/n):\t" << endl;
    supplierIsManufacturerStr = cin.readLine();

    productPrice = productPriceStr.toDouble();

    if(supplierIsManufacturerStr.at(0).toLower() == 'y') {
        supplierIsManufacturer = true;
    } else {
        supplierIsManufacturer = false;
    }

    //Implement classes
    Vendor vendor;
    Product product(productName, productPrice, vendor);
    product.setSupplier(supplierName, supplierEmail, supplierIsManufacturer);

    cout << product.toString(supplierIsManufacturer) << endl;

    return a.exec();
}

vendor.h

#ifndef PRODUCT_H
#define PRODUCT_H

#include "vendor.h"
#include <QString>

class Product {
public:
    Product(QString name, double price, Vendor vendor);
    void setSupplier(QString name, QString email, bool isManufacturer);
    QString getManufacturerName();
    QString toString(bool SupplierDetails);
private:
    QString m_Name;
    double m_Price;
    Vendor m_Supplier;
};

#endif // PRODUCT_H

vendor.cpp

#include <QString>
#include "product.h"
#include "vendor.h"

Product::Product(QString name, double price, Vendor vendor) {
        m_Name = name;
        m_Price = price;
        m_Supplier = vendor;
}

void Product::setSupplier(QString name, QString email, bool isManufacturer) {
    Vendor vendor;
    vendor.setDetails(name, email, isManufacturer);
}

QString Product::getManufacturerName() {
    if(m_Supplier.isManufacturer()) {
        return m_Supplier.getName();
    } else {
        return "Unknown";
    }
}

QString Product::toString(bool supplierDetails) {
    QString output;

    output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + m_Price + "\nProduct Supplier:\t" + getManufacturerName();

    if(supplierDetails) {
        return m_Supplier.toString() + output;
    } else {
        return output;
    }
}

那就是它。

没有编译错误,这纯粹是算法错误。到目前为止,无论我给它输入什么,它总是只显示产品名称,有时产品价格的非数值,然后其他一切都是空的。 #ifndef VENDOR_H #define VENDOR_H #include <QString> class Vendor { public: Vendor(); void setDetails(QString name, QString email, bool isManufacturer); bool isManufacturer(); QString getName(); QString toString(); private: QString m_Name; QString m_Email; bool m_IsManufacturer; }; #endif // VENDOR_H 函数似乎仍在运行。

如果有人能够看出你做错了什么是错的!

2 个答案:

答案 0 :(得分:0)

这一行

 output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + m_Price + "\nProduct Supplier:\t" + getManufacturerName();

应该是:

 output = "\nProduct name:\t\t" + m_Name + "\nProduct price:\t\tR" + QString::number(m_Price) + "\nProduct Supplier:\t" + getManufacturerName();

您应该在“+”之前将数字转换为QString。

供应商类中的重载运算符“=”

Vendor operator=(const Vendor& other)
{
  m_Name = other.m_Name;
  m_Email  = other.m_Email;
  m_IsManufacturer = other.m_IsManufacturer;

}

答案 1 :(得分:0)

我发现了什么是错的。在我的product.cpp文件中,我在setDetails函数中创建了一个新的供应商,这使我的所有供应商详细信息都空白。我应该使用我在Product构造函数中设置的m_Supplier变量...