请求从 'KanjiCard*' 转换为非标量类型'KanjiCard'(自定义枚举)

conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested (custom enum)

本文关键字:KanjiCard 类型 自定义 枚举 标量 转换 请求      更新时间:2023-10-16

好吧,我试着用Google-sensei在这个网站上搜索,虽然我发现了很多关于这个错误的帖子,但我没有发现任何解决枚举的帖子。此外,我所见过的所有问题要么是有人试图将一种类型分配给另一种类型,要么是"new"的使用不当,等等。据我所知,在这种情况下,情况并非如此。

如标题所述,当我试图使用g++编译我正在处理的程序时,我得到了一个错误conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested

我有一个名为KanjiCard的类,它有这个公共定义的enum:

enum KanjiCardType {
    KANJI_CARD = 1,
    KEYWORD_CARD = 2
};

类的构造函数定义如下:

    KanjiCard(char *cardText, int cardTextLength, int cardWidth, int cardHeight,
        int cardX, int cardY, KanjiCardType cardType, SDL_Color textColor);

(我使用char*而不是std::string,因为这样更容易处理我使用的库)

我调用它来创建新的卡片,像这样(这就是错误出现的地方):

KanjiCard currentCard = new KanjiCard(kanji_line, strlen(kanji_line), 
    CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor);

cardType定义如下:KanjiCard::KanjiCardType cardType = KanjiCard::KANJI_CARD;

我最初只是尝试在KanjiCard::KANJI_CARD中传递cardType现在在构造函数调用中,但是我得到了这个错误,所以我一直在尝试我能想到的一切来尝试并让它工作,包括尝试将构造函数中的cardType参数切换到*cardType&cardType,并在调用中混淆cardType的类型,也无济于事。

据我所知,cardType不是一个指针,所以我真的不知道为什么我得到这个消息。任何帮助都将是非常感激的,因为我已经绞尽脑汁想弄清楚这件事了。

编辑:我还应该提到,我也试过把enum从类中拉出来(当然,还删除了KanjiCard::序言),仍然有同样的问题。

这不是cardType的问题;是currentCard。你写的是:

KanjiCard currentCard = new KanjiCard(...

这是将指针赋值给非指针类型。你的意思可能是:

KanjiCard *currentCard = new KanjiCard(...

…或者你的意思是:

KanjiCard currentCard(...

我的建议中的前者将在堆上分配一个KanjiCardcurrentCard将指向KanjiCard。后者将在堆栈上分配它。它一个KanjiCard

前者你必须手动delete。后者不需要是delete d;它在声明的范围内有效,一旦超出范围,它就无效。

前者可以使用->访问成员。后者可以使用.访问成员。

KanjiCard currentCard = KanjiCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor
    );

KanjiCard currentCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor
    );

第一个称为复制初始化,第二个称为直接初始化

注意这里没有new

干杯,hth。