2016-06-17 93 views
-2

爲我的最後一年項目編寫一個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" }; 

}; 

不過,在說了「*位次[]」是一個錯誤:「不完全類型是不允許的。」另外我運行它時會出現C2011錯誤。此外,當我試圖寫這個類,上面的字符將開始得到不完整類型的錯誤。幫幫我?

現在我去掉了「結構」,但不完全類型的錯誤依然存在,它現在顯示:

錯誤C2229類「卡」具有非法零大小的數組
錯誤C2997「卡:: show':數組綁定不能從類內初始化器中推導出來

實際上,結構只是因爲這個錯誤而存在。

編輯:好的。我現在通過以下面的答案之一的方式來口述數組來解決這個問題。我還發現另一個問題很快就會值得另外一個問題。

+6

Err ....這是各種各樣的破碎。兩個類聲明瞭相同的名稱,但是不同的成員類型? (你知道'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

您聲明瞭兩個具有相同名稱的類型,它們違反了一個定義規則。

考慮到在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是不是完全C++ 11標準,看看這個答案 Error: cannot specify explicit initializer for array

你可以在構造函數初始化向量。

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

現在你有三個成員,所有這些都是懸擺指針。做得好。 –

+0

更新爲std :: vector ,我知道這是一點點內存密集型,但它很乾淨。 – Matta

+0

現在您應該使用ctor-initialiser,而不是複製所有內容。 –

相關問題