好吧,我已经尝试过使用Google-sensei并在这个网站上搜索一下,虽然我发现了很多关于这个错误的post,但我还没有发现任何有关枚举的post。 此外,我所看到的所有人都有人试图将一种类型分配给另一种类型,不恰当地使用“新”等等。据我所知,在这种情况下情况并非如此。
正如标题中所述,在尝试编译我正在使用g ++编写的程序时,我收到了conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested
的错误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
类型,也无济于事。
据我所知, cardType
不是指针,所以我真的无法弄清楚为什么我得到那条消息。 任何帮助将不胜感激,因为我在我的智慧结束时试图解决这个问题。
编辑:我还应该提一下,我也尝试将枚举从类中拉出来(当然,删除了KanjiCard::
前言),但仍然有同样的问题。
这不是cardType
的问题; 这是当前的currentCard
。 你写了这个:
KanjiCard currentCard = new KanjiCard(...
那是指向非指针类型的指针。 你可能意味着这个:
KanjiCard *currentCard = new KanjiCard(...
……或者你可能是这个意思:
KanjiCard currentCard(...
我的建议的前者将在堆上分配一个KanjiCard
。 currentCard
将指向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。,
以上就是c/c++开发分享请求从’KanjiCard *’转换为非标量类型’KanjiCard’(自定义枚举)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545896.html