«неполный тип недопустим»

Написание программы klonkide для моего последнего проекта года.

Но теперь произошла ошибка, которая ошеломила меня.

Это черновик моей программы клондайк;

// ConsoleApplication18.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"#include <iostream>
#include <cstdlib>
#include <cctype>

using namespace std;
// Removed part

class card {
char *rank[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
char *suit[] = {"S", "D", "H", "C"};
char *show[] = { "Up", "Down" };

};

Однако на «* rank []» была ошибка, которая гласит: «Неполный тип недопустим». Также я получаю ошибку C2011 при запуске. Кроме того, когда я попытался написать класс, вышеприведенные символы начнут получать ошибку типа Incomplete. Помогите?

Теперь я удалил «struct», но ошибка неполного типа все еще существует, и теперь она показывает:

Ошибка C2229 класса «карта» имеет недопустимый массив нулевого размера
Ошибка C2997 ‘card :: show’: невозможно определить границы массива из инициализатора класса

На самом деле структура была только там из-за этой ошибки.

РЕДАКТИРОВАТЬ: хорошо. Теперь я решил эту проблему, диктуя массивы таким образом, как один из ответов ниже. Я также нашел другую проблему, которая скоро заслужит другой вопрос.

-2

Решение

Вы не можете иметь struct card а также class card в то же время.

0

Другие решения

Вы объявили два типа с одним и тем же именем, нарушая одно правило определения.

Учтите, что в C ++ строковые литералы имеют типы постоянных символьных массивов. Таким образом, например, второй класс должен быть определен как

class card {
const char *rank[13] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
const char *suit[4] = {"S", "D", "H", "C"};
const char *show[2] = { "Up", "Down" };

};

Что касается сообщения об ошибке, размеры массивов в определении класса должны быть указаны явно.

0

Visual Studio 2013 не полностью совместим с C ++ 11, посмотрите на этот ответ
Ошибка: невозможно указать явный инициализатор для массива

Вы можете инициализировать вектор в ctor.

class card_class {
std::vector<std::string> rank;
std::vector<std::string> suit;
std::vector<std::string> show;
public:
card_class()
{
rank = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
suit = { "S", "D", "H", "C" };
show = { "Up", "Down" };
}
};
-1
По вопросам рекламы [email protected]