好吧,我已经尝试过使用Google-sensei并在这个网站上搜索,虽然我发现了很多关于这个错误的帖子,但我还没有找到任何解决这个问题的帖子.此外,我所看到的所有人都有人试图将一种类型分配给另一种类型,不恰当地使用"新"等等.据我所知,在这种情况下情况并非如此.
正如标题中所述,我conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested在尝试编译正在使用g ++的程序时遇到错误.
我有一个名为KanjiCard的类,它具有这个公开定义的枚举:
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不是一个指针,所以我真的无法弄清楚为什么我得到那个消息.任何帮助将不胜感激,因为我在我的智慧结束时试图解决这个问题.
编辑:我还应该提一下,我也尝试将枚举拉出课堂(KanjiCard::当然,删除前言),但仍然有同样的问题.
这不是cardType问题所在; 它是currentCard.你写了这个:
KanjiCard currentCard = new KanjiCard(...
那是指向非指针类型的指针.你可能意味着这个:
KanjiCard *currentCard = new KanjiCard(...
......或者你的意思是:
KanjiCard currentCard(...
我的建议的前者将KanjiCard在堆上分配一个.currentCard将指向KanjiCard.后者将在堆栈上分配它.这是一个KanjiCard.
前者你必须手动delete.后者不需要deleted; 它在声明的范围内有效,一旦超出范围,它就无效.
前者可以访问使用的成员->.后者可以访问使用的成员..