2016-04-04 4 views
-1

コンパイルしようとするとこのエラーが発生します。何が起こっているのでしょうか?私はそれがmaxSizeとtopという整数に関連するものだと思います。 "int^maxSize"のようなものに変更しようとすると、配列の位置を管理するためにこれらのintを使うことはできません。どうもありがとうございました!LNK2020 tシンバルリゾルバ(06000006)AStack ::。ctor [C++/CLI]

AStack.h

#pragma once 

#include "Carta.h" 
#define defaultSize 2048 

ref class AStack 
{ 
private: 
    int maxSize; 
    int top; 
    array<Carta^>^ ListArray; //puntero a arreglo 

public: 
    AStack(); 
    AStack(int size) { 
     maxSize = size; 
     top = 0; 
     ListArray = gcnew array<Carta^>(size); 
    } 

    ~AStack() { delete[] ListArray; } 

    void clear() { top = 0; } 

    void push(Carta^ pElement) { 
     if (top == maxSize) { 
      Console::WriteLine("Stack is full"); 
     } 
     ListArray[top++] = pElement; 
    } 

    Carta^ pop() { 
     if (top == 0) { 
      Console::WriteLine("Stack empty"); 
     } 
     return ListArray[--top]; //retorna top y despues lo decrementa 
    } 

    Carta^ topValue() { 
     if (top == 0) { 
      Console::WriteLine("Stack empty"); 
     } 
     return ListArray[top - 1]; 
    } 

    int length() { 
     return top; //largo de pila 
    } 
}; 

Carta.h

#pragma once 

using namespace System; 

ref class Carta 
{ 

private: 
    String^ cara; 
    String^ palo; 
    String^ direccion; 

public: 
    Carta(); 
    Carta(String^ pCara, String^ pPalo) { 
     cara = pCara; 
     palo = pPalo; 
     direccion = pCara + pPalo; 
    } 

    String^ print() { 
     return (cara + " de " + palo); 
    } 

    String^ getDireccion() { 
     return direccion; 
    } 
}; 

Deck.h

#include <cstdlib> 
#include <ctime> 
#include <iomanip> 
#include "Carta.h" 
#include "AStack.h" 

#define ARRAY_SIZE 54 

using namespace System; 

ref class Deck 
{ 
private: 
    array<Carta^>^ deck = gcnew array<Carta^>(ARRAY_SIZE); 
    int posicion; 
    bool ya; 

public: 
    Deck() { 
     ya = false; 
     array<String^>^ caras = { "As","Dos","Tres","Cuatro","Cinco","Seis","Siete","Ocho","Nueve","Diez", 
      "Jack","Dama","Rey" }; 

     array<String^>^ palos = { "Corazon","Diamante","Espada","Trebol" }; 

     for (int i = 0; i < ARRAY_SIZE - 2; i++) { 
      deck[i] = gcnew Carta(caras[i % 13], palos[i/13]); 
     } 
     deck[52] = gcnew Carta("Joker", "Negro"); 
     deck[53] = gcnew Carta("Joker", "Rojo"); 
    } 

    ~Deck() { 
     delete[]deck; 
    } 

    void mostrar() { 
     for (int i = 0; i<54; i++) { 
      Console::WriteLine(deck[i]->print());   
     } 
    } 

    void mezclar() { 
     for (int primero = 0; primero < 54; primero++) { 
      int segundo = (rand() + time(0)) % 54; 
      Carta^ temp = deck[primero]; 
      deck[primero] = deck[segundo]; 
      deck[segundo] = temp; 
     } 
    } 

    Carta^ topCarta() { 
     return deck[0]; 
    } 


    void cortar(int pos) { 
     if (pos != 0 && pos != 53) { 
      AStack^ pila; 

      for (int i = pos; i < 54; i++) { 
       pila->push(deck[i]); 
      } 

      for (int j = 0; j < pos; j++) { 
       pila->push(deck[j]); 
      } 

      for (int k = 0; k < 54; k++) { 
       deck[k] = pila->pop(); 
      } 
     } 
    } 
}; 
+0

'AStack'と'彼らはいくつかの他の場所にいる場合を除きCarta'のデフォルトコンストラクタは、何の遺体を持っていないあなた'表示されません。 – Unimportant

+0

C++/CLIとしてC++にタグを付けないようにしてください。 – Deduplicator

答えて

1

単純な答え

は、車輪の再発明しないでください。 .NetライブラリクラスSystem::Collections::Generic::Stackを使用してください。

より複雑な回答

AStack(); 

これはほぼ確実にあなたのエラーの原因である:あなたはノーパラメータのコンストラクタを宣言したが、それを実装したことがありません。

Carta(); 

ここでも同じです。

~AStack() { delete[] ListArray; } 

これは間違っている:delete[]newに割り当てられたものです。 gcnewで割り当てられたものはdelete[]を必要としません。 (あなたはDisposeオブジェクトに、[]せず、deleteを使用するのですが、配列はIDisposableではありません。)

+0

あなたはすべての理由があります!、ありがとうございます:) – nanokuro

関連する問題