2016-06-17 4 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 []"에는 "불완전한 유형이 허용되지 않습니다"라는 오류가있었습니다. 또한 나는 그것을 실행하면 C2011 오류가 발생합니다. 또한 클래스를 작성하려고하면 위의 문자가 불완전한 형식 오류가 발생하기 시작합니다. 도움?

는 지금은 "구조체"를 제거하지만, 불완전한 유형의 오류가 여전히 존재하고, 지금 보여줍니다

오류 C2229 클래스 '카드'불법 크기가 0 인 배열
오류 C2997 '카드를 ::있다 표시 ': 배열 바운드를 클래스 이니셜 라이저에서 추론 할 수 없습니다.

사실이 오류로 인해 struct가있었습니다.

편집 : 확인. 이제 아래 답변 중 하나와 같은 방식으로 배열을 지시하여이 문제를 해결했습니다. 나는 또 다른 문제를 곧 발견 할 수있는 또 다른 문제를 발견했다.

+6

오류 ....이 모든 종류의 고장입니다. 두 클래스는 같은 이름이지만 다른 멤버 유형으로 선언 되었습니까? ('struct'와'class'의 유일한 차이점은 default가'public'이고 다른 하나는'private'입니까?'card'가 재정의되었습니다.) – DevSolar

+0

"* the C2011 error * "? – 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

비주얼 스튜디오 2013가 완전히 C++ 11 호환되지 않는, 당신은의 ctor에서 벡터를 초기화 할 수 있습니다이 답변에 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

이제는 3 명의 멤버가 있는데 모두 포인터가 매달려있다. 잘 했어. –

+0

std :: vector 으로 업데이트했습니다. 메모리 사용량은 적지 만 깨끗합니다. – Matta

+0

이제 모든 것을 복사하는 대신 ctor-initialiser를 사용해야합니다. –

관련 문제