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

Kan*_*uri 5 c c++ enums g++

好吧,我已经尝试过使用Google-sensei并在这个网站上搜索,虽然我发现了很多关于这个错误的帖子,但我还没有找到任何解决这个问题的帖子.此外,我所看到的所有人都有人试图将一种类型分配给另一种类型,不恰当地使用"新"等等.据我所知,在这种情况下情况并非如此.

正如标题中所述,我conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested在尝试编译正在使用g ++的程序时遇到错误.

我有一个名为KanjiCard的类,它具有这个公开定义的枚举:

enum KanjiCardType {
    KANJI_CARD = 1,
    KEYWORD_CARD = 2
};
Run Code Online (Sandbox Code Playgroud)

该类的构造函数定义如下:

    KanjiCard(char *cardText, int cardTextLength, int cardWidth, int cardHeight,
        int cardX, int cardY, KanjiCardType cardType, SDL_Color textColor);
Run Code Online (Sandbox Code Playgroud)

(我正在使用char*而不是std :: string,因为它更容易使用我正在使用的库.)

我打电话给它创建像这样的新卡(这是错误出现的地方):

KanjiCard currentCard = new KanjiCard(kanji_line, strlen(kanji_line), 
    CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor);
Run Code Online (Sandbox Code Playgroud)

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

我最初试图只是路过的KanjiCard::KANJI_CARD地方cardType是在构造函数调用的权利,但我得到的错误,所以我一直在尝试一切我能想到的尝试,并得到它的工作,其中包括试图切换cardType在构造函数参数*cardType&cardType并且搞乱cardType了电话中的类型,但无济于事.

据我所知,cardType不是一个指针,所以我真的无法弄清楚为什么我得到那个消息.任何帮助将不胜感激,因为我在我的智慧结束时试图解决这个问题.

编辑:我还应该提一下,我也尝试将枚举拉出课堂(KanjiCard::当然,删除前言),但仍然有同样的问题.

ick*_*fay 5

这不是cardType问题所在; 它是currentCard.你写了这个:

KanjiCard currentCard = new KanjiCard(...
Run Code Online (Sandbox Code Playgroud)

那是指向非指针类型的指针.你可能意味着这个:

KanjiCard *currentCard = new KanjiCard(...
Run Code Online (Sandbox Code Playgroud)

......或者你的意思是:

KanjiCard currentCard(...
Run Code Online (Sandbox Code Playgroud)

我的建议的前者将KanjiCard在堆上分配一个.currentCard将指向KanjiCard.后者将在堆栈上分配它.这一个KanjiCard.

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

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