Написание программы 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’: невозможно определить границы массива из инициализатора класса
На самом деле структура была только там из-за этой ошибки.
РЕДАКТИРОВАТЬ: хорошо. Теперь я решил эту проблему, диктуя массивы таким образом, как один из ответов ниже. Я также нашел другую проблему, которая скоро заслужит другой вопрос.
Вы не можете иметь struct card
а также class card
в то же время.
Вы объявили два типа с одним и тем же именем, нарушая одно правило определения.
Учтите, что в 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" };
};
Что касается сообщения об ошибке, размеры массивов в определении класса должны быть указаны явно.
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" };
}
};