Маленький вопрос о конструкторах
От: Аноним  
Дата: 23.11.09 11:42
Оценка:
Проблема такая. Есть вектор, примерно так (всё происходит в пространстве имён os):
typedef size_t count_t;

template <typename _Val>
class Vector {
public:
   Vector(os::count_t _cSize) : m_pStart(NULL), m_pEnd(NULL), m_pEOS(NULL)
   {
    resize(_cSize);/*resize описан где-то ниже*/
   }
}

Хочу из него сделать матрицу:

template <typename _Val>
class Matrix
{
public:
    typedef _Val tType;

   //Default constructor
   Matrix()
   {
    count_t temp = _ROWS*_COLS;
    m_V (temp);//на этой строчке ошибку выдаёт!
   }
   Vector<tType> m_V

Где-то в главной функции (main) создаётся матрица даблов.
Ошибка такая: error: no match for call to ‘(os::Vector<double>) (os::count_t&)’ .

В общем-то не понятно, как исправить.
Компилятор gcc 4.4.1.
c++ конструкторы
Re: Маленький вопрос о конструкторах
От: Erop Россия  
Дата: 23.11.09 11:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>template <typename _Val>
А>class Matrix
А>{
А>public:
А>    typedef _Val tType;

А>   //Default constructor
А>   Matrix() : m_V ( ROWS*_COLS )
А>   {
          // Так попробуй ;)
А>   }
А>   Vector<tType> m_V
А>

А>Где-то в главной функции (main) создаётся матрица даблов.
А>Ошибка такая: error: no match for call to ‘(os::Vector<double>) (os::count_t&)’ .

А>В общем-то не понятно, как исправить.

Понятно всё. Смотри исправление во фрагменте выше...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Маленький вопрос о конструкторах
От: AntonScherbakov  
Дата: 23.11.09 11:58
Оценка:
Здравствуйте, Erop, Вы писали:

E>Понятно всё. Смотри исправление во фрагменте выше...


Спасибо! Подскажите, как это объяснить? Раньше думал, что это эквивалентные записи.

--
Антон.
Re[3]: Маленький вопрос о конструкторах
От: vsb Казахстан  
Дата: 23.11.09 12:02
Оценка:
Здравствуйте, AntonScherbakov, Вы писали:

AS>Здравствуйте, Erop, Вы писали:


E>>Понятно всё. Смотри исправление во фрагменте выше...


AS>Спасибо! Подскажите, как это объяснить? Раньше думал, что это эквивалентные записи.


AS>--

AS>Антон.

В вашем случае просто вызывается оператор () у соответствующего объекта. Никакого такого оператора у него нет, вот и ошибка.
Re[3]: Маленький вопрос о конструкторах
От: Кодт Россия  
Дата: 23.11.09 13:08
Оценка:
Здравствуйте, AntonScherbakov, Вы писали:

AS>Спасибо! Подскажите, как это объяснить? Раньше думал, что это эквивалентные записи.


Конструкторы баз и членов вызываются в списке инициализации, перед входом в тело конструктора финального объекта.
Если в списке чего-то нет, то у соответствующей базы или члена выполняется дефолтный конструктор (без параметров).
А уже в теле конструктора, равно как в теле любой другой функции, можно только вызывать функции, но не конструкторы.

В принципе, можно было вполне удовлетвориться двухфазной инициализацией:
— дефолтный конструктор вектора — создаёт пустой вектор
— затем к вектору применяется функция resize()
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[3]: Маленький вопрос о конструкторах
От: Erop Россия  
Дата: 23.11.09 13:24
Оценка:
Здравствуйте, AntonScherbakov, Вы писали:

AS>Спасибо! Подскажите, как это объяснить? Раньше думал, что это эквивалентные записи.


Не эквивалентны, как видишь. Твоя -- это попытка вызова operator() у твоего поля.
А правильная называется вызов конструктора базы или поля...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.