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

时间:2011-08-15 06:06:46

标签: c++ c enums g++

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

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

我有一个名为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::前言),但仍有同样的问题。< / p>

2 个答案:

答案 0 :(得分:5)

问题不在于cardType;它是currentCard。你写了这个:

KanjiCard currentCard = new KanjiCard(...

指定指向非指针类型的指针。你可能意味着这个:

KanjiCard *currentCard = new KanjiCard(...

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

KanjiCard currentCard(...

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

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

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

答案 1 :(得分:2)

待办事项

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

干杯&amp;第h。,