Russian Qt Forum
Июнь 16, 2024, 02:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Конструктор копии  (Прочитано 5850 раз)
fear
Гость
« : Август 07, 2006, 11:23 »

Код:
#include <iostream>
#include <vector>

class A
{
  public:
    A();
    A(A &a);

    int geta() const;

  private:
    int a_;
};

A::A()
:a_(1)
{

}

A::A(A &a)
:a_(a.geta())
{
 
}

int A::geta() const
{
  return a_;
}

void main()
{
  A a;
  std::vector<A> vec;

  vec.insert(vec.end(), a);
}


Компилятор выдаёт:
    ------ Build started: Project: test4, Configuration: Debug Win32 ------
    Compiling...
    main.cpp
    d:\lang\microsoft visual studio 8\vc\include\vector(1125) : error C2558: class 'A' : no copy constructor available or copy constructor is declared 'explicit'
            d:\lang\microsoft visual studio 8\vc\include\vector(1117) : while compiling class template member function 'void std::vector<_Ty>::_Insert_n(std::_Vector_iterator<_Ty,_Alloc>,__w64 unsigned int,const _Ty &)'
            with
            [
                _Ty=A,
                _Alloc=std::allocator<A>
            ]
            d:\lang\myprojects\c++\qt\test4\test4\main.cpp(36) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
            with
            [
                _Ty=A
            ]
    Build log was saved at "file://d:\Lang\MyProjects\C++\QT\test4\test4\Debug\BuildLog.htm"
    test4 - 1 error(s), 0 warning(s)


Непонимающий
Записан
kolobok0
Гость
« Ответ #1 : Август 07, 2006, 14:10 »

Забыли волшебное слово "const" в обьявлении и реализации конструктора копий.

правильно будет...

Код:
#include <iostream>
#include <vector>

class A
{
  public:
    A();
    A(const A &a);

    int geta() const;

  private:
    int a_;
};

A::A()
:a_(1)
{

}

A::A(const A &a)
:a_(a.geta())
{
 
}

int A::geta() const
{
  return a_;
}

void main()
{
  A a;
  std::vector<A> vec;

  vec.insert(vec.end(), a);
}


с уважением
(круглый)
Записан
fear
Гость
« Ответ #2 : Август 07, 2006, 18:04 »

Спасибо, друг, а я уже думал схожу с ума Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.