2016-06-17 14 views
-2

最終年度プロジェクトのためのklonkideプログラムの作成。「不完全なタイプは許可されていません」

しかし、今、私は唖然と持っていたエラーが発生しました。

これは私のklondikeプログラムの草案です。

// 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 []」に「Incomplete type is not allowed」というエラーがありました。また、私はそれを実行するとC2011エラーを取得します。また、私はクラスを記述しようとすると、上記の文字は、不完全な型のエラーを取得し始めます。助けて?

今私は、「構造体」を削除されますが、不完全な型エラーがまだ存在しますが、それが今で示しています

エラーC2229クラスのカードは「違法なゼロ・サイズの配列
エラーC2997「のカードを持っている::配列 'はクラス内の初期化子から推測できません

実際にこのエラーが原因で構造体が存在しました。

EDIT:ok。私は今、以下の答えの1つのように配列を指示することによってこれを解決しました。私はまた別の問題がすぐに別の問題になることを発見しました。

+6

のErr ....これは壊れたのすべての種類です。 2つのクラスは同じ名前で宣言されていますが、メンバーの種類は異なりますか? (あなたは 'struct'と' class'の唯一の違いは、デフォルトが 'public'と' private'です。あなたは 'card'を再定義しています)。 – DevSolar

+0

" * C2011エラー* "? – melpomene

+3

あなたのタイプは両方とも "カード"と呼ばれ、C2011は "クラスタイプの再定義"です。そのエラーについては何が分かりませんか? – molbdnilo

答えて

0

あなたは同時にstruct cardclass cardを持つことはできません。

+2

"識別子はタイプに関係なく一意でなければなりません。"正しい声明ではありません。たとえば、この宣言struct A {} A; C++で有効です。 –

+0

@VladfromMoscowうん、それはあいまいな..ですが.. – sjsam

0

あなたは一つの定義ルールを破ると同じ名前を持つ2つのタイプを宣言しました。

は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

これが働いていることに離陸したが、現在はエラーと題しLNK1120および2019 –

-1

のVisual Studio 2013を使用すると、ctorの中でベクトルを初期化することができ、この答え Error: cannot specify explicit initializer for array

を見て、完全に準拠したC++ 11ではありません。

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" }; 
    } 
}; 
+0

今、あなたはポインタをぶら下がっているすべてのそれらの3人のメンバー、持っているがあります。よくやった。 –

+0

std :: vector に更新されていますが、これは少しメモリを消費しますが、きれいです。 – Matta

+0

これで、すべてをコピーするのではなく、ctor-initialiserを使用する必要があります。 –

関連する問題