Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 21:55   #1
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию Ошибки при построении

Пишу экзаменационную программу. Застрял в самом начале не могу сообразить в чем загвоздка. При построении выскакивает куча ошибок, как инициализировать массив string и остальные. Плиз помогите. Код ниже:

Код:
#include <iostream>
#include <conio.h>
#include <cstring>
#define size 52;

using namespace std;

class Deck
{
public:
	Deck ();
	void Deal ();
	void AddCard ();
	void ChangeCard ();
private:
	string Cards [size];
	char Suit [size];
	bool Picked [size];
};

Deck::Deck ()
{
	Cards [] = {"2","2","2","2"} ;
	Suit [] = {'3','4','5','6'};
	Picked [] = {NULL};
}

Последний раз редактировалось Stilet; 26.08.2010 в 11:29.
yugik вне форума Ответить с цитированием
Старый 25.08.2010, 22:06   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Не уверен (не могу проверить сейчас), попробуйте то что в конструкторе вынести прямо в объявление класса после private, если не выйдет то делайте так (возможно)
Код:
Deck::Deck() { Cards = new string[] { ... } ...
BOBAH13 вне форума Ответить с цитированием
Старый 26.08.2010, 11:04   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

По идее должно быть как-то так:
Код:
Deck::Deck ()
:Cards({"2","2","2","2"}),
 Suit({'3','4','5','6'}),
 Picked({NULL})
{

}
Но компиляторы такое не поддерживают. Если мне не изменяет память, то массивы-члены классов вообще нельзя никак инициализировать, кроме как поэлементно:
Код:
Deck::Deck ()
{
  Cards[0] = "2";
  Cards[1] = "2";
  ...
}
Хотя в новом стандарте может ситуация и изменилась.
pu4koff вне форума Ответить с цитированием
Старый 27.08.2010, 09:57   #4
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию

Всем спасибо кто откликнулся. Убил кучу ошибок которые оказываеться большинство было из-за обьявления константы через #define. Теперь кол вот такой и всего 2 ошибки при построении:

Код HTML:
#include <iostream>
#include <conio.h>
#include <cstring>

const int size = 52;
using namespace std;

class Deck
{
private:
	string Cards [size];
	char Suit [size];
	bool Picked [size];

public:
	Deck ();
	/*{
		Cards = {"2", "2", "2", "2", "3", "3", "3", "3", "4", "4", "4", "4", "5", "5", "5", "5", "6", "6", "6", "6", "7", "7", "7", "7", "8", "8", "8", "8", "9", "9", "9", "9"};
	}*/
	void Deal ();
	void AddCard ();
	void ChangeCard ();
};

Deck::Deck ()
{
	Cards = ("2", "2", "2", "2", "3", "3", "3", "3", "4", "4", "4", "4", "5", "5", "5", "5", "6", "6", "6", "6", "7", "7", "7", "7", "8", "8", "8", "8", "9", "9", "9", "9");
	Suit  = ('3','4','5','6');
	Picked [0] = 0;
}
Ошибки при построении:

Код HTML:
1>Компиляция...
1>poker.cpp
1>c:\users\apolon\documents\visual studio 2008\projects\poker\poker\poker.cpp(27) : error C2440: =: невозможно преобразовать 'const char *' в 'std::string [52]'
1>        Не существует преобразований в типы массивов, хотя существуют преобразования в ссылки или указатели на массивы
1>c:\users\apolon\documents\visual studio 2008\projects\poker\poker\poker.cpp(28) : error C2440: =: невозможно преобразовать 'char' в 'char [52]'
1>        Не существует преобразований в типы массивов, хотя существуют преобразования в ссылки или указатели на массивы
yugik вне форума Ответить с цитированием
Старый 27.08.2010, 10:40   #5
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

pu4koff глаголит истину.
Код:
массивы-члены классов вообще нельзя никак инициализировать, кроме как поэлементно
Придется поднапрячься и делать все долго,нудно,через...))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 27.08.2010, 17:24   #6
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Придется поднапрячься и делать все долго,нудно,через...))
Есть вариант получше:

Никто не заметил, что данные в классе не зависят от параметров конструктора? Значит эти данные вполне можно сделать статическими. Вот так:

Код:
#include <string>

const int size = 52;
using namespace std;

class Deck
{
private:
	static string Cards [size];
	// дальше так же

public:
	Deck ();
	void Deal ();
	void AddCard ();
	void ChangeCard ();
};


string Deck::Cards [size] =
{
"2", "2", "2", "2",
"3", "3", "3", "3",
"4", "4", "4", "4",
"5", "5", "5", "5",
"6", "6", "6", "6",
"7", "7", "7", "7",
"8", "8", "8", "8",
"9", "9", "9", "9"
};
Да и вообще, такие данные и программно можно заполнить.

ЗЫ А можно замахнуться и написать так:
Код:
#include <string>

using namespace std;

class Deck
{
private:
	static string Cards[];

public:
	Deck ();
	void Deal ();
	void AddCard ();
	void ChangeCard ();
};


string Deck::Cards[] =
{
"2", "2", "2", "2",
"3", "3", "3", "3",
"4", "4", "4", "4",
"5", "5", "5", "5",
"6", "6", "6", "6",
"7", "7", "7", "7",
"8", "8", "8", "8",
"9", "9", "9", "9"
};

Последний раз редактировалось Carbon; 27.08.2010 в 17:32.
Carbon вне форума Ответить с цитированием
Старый 27.08.2010, 17:33   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
Никто не заметил, что данные в классе не зависят от параметров конструктора? Значит эти данные вполне можно сделать статическими.
Вообще-то массивы наверняка изменяются в процессе работы с объектом и они не в одном экземпляре на класс, а у каждого объекта свой массив. Так что статичность тут вряд ли подойдет.
pu4koff вне форума Ответить с цитированием
Старый 27.08.2010, 17:58   #8
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Я ж говорю, что вполне можно и программно заполнить.
Ну да может, тогда придётся заполнять руками, или можно хранить образец такого массива и в конструкторе быстренько его копировать.
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при построении в visual c++ ghost1st Visual C++ 2 13.02.2010 22:55
Ошибки при сохранении Alex19789 Microsoft Office Excel 6 16.10.2009 12:39
MS Visual Studio. ошибка при построении Backfire Софт 0 11.10.2009 18:19
Рекурсия при построении матрицы достигаемости [MI_nor] Общие вопросы C/C++ 0 29.03.2009 22:16
ошибки при компиляции |{ot Общие вопросы Delphi 14 02.08.2008 01:20