Russian Qt Forum

Программирование => С/C++ => Тема начата: fear от Август 07, 2006, 11:23



Название: Конструктор копии
Отправлено: 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)


???


Название: Re: Конструктор копии
Отправлено: kolobok0 от Август 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 от Август 07, 2006, 18:04
Спасибо, друг, а я уже думал схожу с ума :)