【问题标题】:C++ argument of type is incompatible with parameter of type类型的 C++ 参数与类型的参数不兼容
【发布时间】:2019-07-14 08:03:11
【问题描述】:

我正在尝试使用返回函数将 stockname 获取到我的派生类,但它显示错误“类型参数与类型参数不兼容”。 strcpy(名称,s.name()); //问题 我试图使它成为一个常量字符,但这产生了一些错误。 我正在做一个股票市场项目,把你的想法发短信给我。

#include<iostream>
#include<conio.h>
#include<fstream>
#include<string.h>
using namespace std;
class stock
{
    char stockname[20];
    float istockprice;
    float fstockprice;
    int demand;
public:
    void senter();
    void sdisplay();
    int demands()
    {
        return demand;
    }
    char name()
    {
        return s.stockname[20];
    }
};
class market : public stock 
{
    char stocksell[20];
    char stockbuy[20];
    float sellprice;
    float rate;
public:
    void marketdata();
    void rate();
    void search();
};
class transaction
{
public: 
    void credit();
    void debit();
    void transfer();
};
market m;
transaction t;
stock s;
void market::rate()
{
    m.rate = demands();
    m.rate += 1;
}
void market::search()
{
    char name[30];
    strcpy(name,s.name()); //Problem
    ifstream search("Marketdata.txt");
    if (!search)
    {
        cout << "Marketdata.txt file error";
        return;
    }
    //while (search.read((char*)& m, sizeof(m)))
    //{
    //  if (strcmp(m.stocksell,name)==0)
        //{

        //}

//    }
}

【问题讨论】:

  • 忘记 char[] 并使用 std::string。
  • 您返回的不是字符串,而是 1 个字符。而且这个角色已经越界了。 strcpy,只能从字符串复制,不能从单个字符复制。

标签: c++


【解决方案1】:

您对 C 风格的字符串(和数组)感到困惑。在 C++ 中你真的应该使用 C++ 风格的字符串,但是你已经用 C 字符串开始了这段代码,所以我们现在继续。

在 C 中,字符串是一个字符数组,要操作字符串,您需要一个指向数组第一个元素的 指针。所以这段代码是错误的

char name()
{
    return s.stockname[20];
}

首先,那里有一个完全虚假的s,我不知道你认为它有什么作用(我很惊讶它会编译)。但重点是因为这是一个 C 风格的字符串,所以函数应该返回一个指针。

char* name() // returns a pointer
{
    return stockname;
}

所以stockname是一个包含C风格字符串的数组,name是一个返回指向数组第一个元素的指针的方法。

奇怪的是,你如何在 C 中处理字符串。C++ 字符串要容易得多,有很多不同的方式。如果你真的想学习 C++,你应该把所有遗留的 C 东西抛在脑后。

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2020-01-20
    • 2020-12-02
    • 1970-01-01
    • 2021-03-08
    • 2012-11-06
    相关资源
    最近更新 更多