为我的最后一年项目写一个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" };
};
然而,在&#34; * rank []&#34;是一个错误,说:&#34;不允许不完整类型&#34;。我运行它时也会收到C2011错误。此外,当我尝试编写类时,上面的字符将开始获取不完整类型错误。帮助
现在我删除了&#34; struct&#34;,但不完整的类型错误仍然存在,现在显示:
错误C2229 class&#39; card&#39;有一个非法的零大小阵列
错误C2997&#39; card :: show&#39;:数组绑定无法从类内初始化程序中推断出
实际上结构只是因为这个错误而存在。
编辑:好的。我现在通过像下面的答案之一那样指示数组来解决这个问题。我还发现了另一个问题,很快就会有另一个问题。答案 0 :(得分:0)
您不能同时拥有struct card
和class card
。
答案 1 :(得分: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" };
};
对于错误消息,应明确指定类定义中数组的大小。
答案 2 :(得分:-1)
Visual Studio 2013并不完全符合C ++ 11标准,请看这个答案 Error: cannot specify explicit initializer for array
你可以在ctor中初始化vector。
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" };
}
};