好的,我已经尝试过使用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>
答案 0 :(得分:5)
问题不在于cardType
;它是currentCard
。你写了这个:
KanjiCard currentCard = new KanjiCard(...
指定指向非指针类型的指针。你可能意味着这个:
KanjiCard *currentCard = new KanjiCard(...
......或者你的意思是:
KanjiCard currentCard(...
我的建议的前者将在堆上分配KanjiCard
。 currentCard
将指向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。,