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

好吧,我已经尝试过使用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(... 

我的建议的前者将在堆上分配一个KanjiCardcurrentCard将指向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。,