2011-08-15 6 views
5

Bien, he intentado usar Google-sensei y buscar en este sitio web, y aunque he encontrado muchas publicaciones sobre este error , No he encontrado ninguno que se haya dirigido a enumeraciones. Además, todos los que he visto han sido alguien tratando de asignar un tipo a otro, uso indebido de 'nuevo', etc. Por lo que puedo decir, ese no es el caso en este caso.conversión de 'KanjiCard *' a tipo no escalar 'KanjiCard' solicitada (enum personalizada)

Como se indica en el título, me aparece un error conversion from 'KanjiCard*' to non-scalar type 'KanjiCard' requested al intentar compilar el programa en el que estoy trabajando usando g ++.

tengo una clase llamada KanjiCard que tiene esta enumeración definido públicamente-:

enum KanjiCardType { 
    KANJI_CARD = 1, 
    KEYWORD_CARD = 2 
}; 

El constructor de la clase se define como sigue:

KanjiCard(char *cardText, int cardTextLength, int cardWidth, int cardHeight, 
     int cardX, int cardY, KanjiCardType cardType, SDL_Color textColor); 

(estoy usando en lugar char * de std :: string porque es más fácil trabajar con las bibliotecas que estoy usando de esa manera.)

Lo estoy llamando para crear nuevas tarjetas como tal (aquí es donde aparece el error):

KanjiCard currentCard = new KanjiCard(kanji_line, strlen(kanji_line), 
    CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor); 

cardType se define como tal: KanjiCard::KanjiCardType cardType = KanjiCard::KANJI_CARD;

principio intenté de paso en donde KanjiCard::KANJI_CARDcardType es en esa llamada al constructor en este momento, pero tengo ese error, por lo que he estado tratando todo lo posible piense en intentar que funcione, incluso intente cambiar el parámetro cardType en el constructor a *cardType y &cardType y alterne también con el tipo de cardType en la llamada, en vano.

Por lo que puedo decir, cardType no es un puntero, así que realmente no puedo entender por qué estoy recibiendo ese mensaje. Cualquier ayuda sería muy apreciada, ya que estoy en el último momento tratando de resolver esto.

Editar: También debería mencionar que yo también intentó tirar de la enumeración de la clase (y eliminar el prefacio KanjiCard::, por supuesto), y todavía tenía el mismo problema.

Respuesta

5

No es cardType ese es el problema; es currentCard. Usted escribió esto:

KanjiCard currentCard = new KanjiCard(... 

Eso es asignar un puntero a un tipo de no puntero. Es posible que haya significado esto:

KanjiCard *currentCard = new KanjiCard(... 

... o puede haber significado esto:

KanjiCard currentCard(... 

El primero de mis sugerencias destinará un KanjiCard en el montón. currentCard apuntará al KanjiCard. Este último lo asignará a la pila. Es es a KanjiCard.

Lo primero tendrá que hacerlo manualmente delete. Este último no necesita ser delete d; es válido dentro del alcance que se ha declarado y una vez que se sale del alcance, no es válido.

La primera se puede acceder a los miembros de usar ->. Este último puede acceder a los miembros de usar ..

+0

(** facepalms y se ríe) Sí **. eso probablemente sea. xD Gracias por captar eso para mí. Eso me enseñará a programar cuando estoy cansado. ;) – Kanmuri

2

Haz

KanjiCard currentCard = KanjiCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor 
    ); 

o

KanjiCard currentCard(
    kanji_line, strlen(kanji_line), CARD_WIDTH, CARD_HEIGHT, xPos, yPos, cardType, textColor 
    ); 

El primero se llama copia de inicialización, y el segundo se llama inicialización directa.

Tenga en cuenta que no hay new aquí.

Saludos & HTH.,

Cuestiones relacionadas