Преобразование из 'char' в нескалярный тип 'Vector <char>' выдает ошибку по неизвестной причине - PullRequest
1 голос
/ 21 декабря 2010

Произошла ошибка Неизвестная причина

#include "std_lib_facilities.h"

int main()  
{  
    vector<char> shape = ('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a');  
    return(0);  
}

, что одна строка с вектором выбрасывает эту ошибку, которую я никогда раньше не видел и не могу выяснить ...

:: g ++ TicTacToe.cpp -o TTT
TicTacToe.cpp: в функции int main()':<br> TicTacToe.cpp:5: error: conversion from char 'для нескалярного типа `Vector' запрошено

См. в каждом поле крестики-нолики оно будет начинаться как _ и затем идтик X или O, я делаю это без графической библиотеки, поэтому его терминальная графика.

Ответы [ 4 ]

2 голосов
/ 21 декабря 2010

Если все значения одинаковы, вы можете использовать следующий конструктор std::vector:

std::vector<char> shape( 9, 'a' );

Если часть или все значения различны, вы можете использовать другой конструктор следующим образом:

static const char ini[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' };
std::vector<char> shape( ini, ini+sizeof(ini) );

Или

static const char ini[] = "abcdefghi";
std::vector<char> shape( ini, ini+sizeof(ini)-1 );
1 голос
/ 21 декабря 2010

Такая векторная инициализация невозможна в текущем C ++. Вы можете использовать:

vector<char> shape(9, 'a');

, который даст желаемый эффект (создайте вектор размером 9, где для всех элементов установлено значение '_').

Если boost является опцией, Boost.Assign предоставляет тот синтаксис, который вы хотели достичь изначально, хотя в данном конкретном случае использование соответствующего конструктора std::vector в значительной степени достаточно .

0 голосов
/ 21 декабря 2010

Класс vector имеет следующий конструктор:

explicit vector( size_type n, const T& value= T(), const Allocator&=Allocator());

С помощью которого вы можете сделать:

vector<char> shape (9,'a');
0 голосов
/ 21 декабря 2010

вектор не имеет такого конструктора. Смотрите действительные конструкторы .

...