Форум программистов, компьютерный форум CyberForum.ru

error C2668 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 179
25.03.2011, 04:27     error C2668 #1
ошибка
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project13\project13\project13.cpp(11) : error C2668: stack::stack: неоднозначный вызов перегруженной функции
1> c:\documents and settings\er\мои документы\visual studio 2008\projects\project13\project13\incl.h(17): может быть 'stack::stack(int,char)'
1> c:\documents and settings\er\мои документы\visual studio 2008\projects\project13\project13\incl.h(16): или 'stack::stack(void)'
1> при попытке сопоставить список аргументов '(void)'
1>Журнал построения был сохранен в "file://c:\Documents and Settings\er\Мои документы\Visual Studio 2008\Projects\project13\project13\Debug\BuildLog.htm"
1>project13 - ошибок 1, предупреждений 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
typedef unsigned long ulong;
 
    class stack
{
    public:
    static const int max = 10;
    int size;
    int top;
    ulong *pitem;
    int *psize;
    int *ptop;
 
    stack();
    stack(int n = 1);
    stack(const stack &obj);
    ~stack();
    stack& operator=(const stack &obj);
    friend ostream& operator<<(ostream &os, const stack &obj);
 
    void show();
    bool isempty()const;
    bool isfull()const;
    bool push(ulong &item);
    bool pop(ulong &item);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
using namespace std;
 
typedef unsigned long ulong;
 
    stack::stack()
{
    cout << "Constructor\n";
    pitem = new ulong;
    size = 0;
    psize = 0;
    ptop = 0;
 
}
    stack::stack(int n)
{
    cout << "Constructor with parameters\n";
    if(n>max)
    {
        cout << "There is limit 10 on elements amount\n";
        pitem = new ulong [max];
    }
    else
    {
        pitem = new ulong [n];
    }
    size = 0;
    psize = 0;
    ptop = 0;
}
    stack::~stack()
{
    cout << "Destructor\n";
    delete pitem;
    if(ptop!=0)
        delete ptop;
    if(psize!=0)
        delete psize;
}
 
    stack::stack(const stack &obj)
{
    cout << "Copy constructor\n";
    delete pitem;
    pitem = new ulong [size];
    int i = obj.size;
    for(int j = 0; i>0; i--, j++)
        *(pitem+j) = obj.pitem[j];
    if(ptop!=0)
        delete ptop;
    ptop = new int;
    *ptop = obj.top;
    if(psize!=0)
        delete psize;
    psize = new int;
    *psize = obj.size;
}
    stack& stack::operator=(const stack &obj)
{
    cout << "Operator '='\n";
    if(this==&obj)
        return *this;
    delete pitem;
    int i = obj.size;
    pitem = new ulong [i];
    for(int j=0; i>0; i--, j++)
        *(pitem+j) = obj.pitem[j];
    if(ptop!=0)
        delete ptop;
    ptop = new int;
    *ptop = obj.top;
    if(psize!=0)
        delete psize;
    psize = new int;
    *psize = obj.size;
    return *this;
}
    ostream& operator<<(ostream &os, const stack &obj)
{
    os << "\n";
    return os;
}
    void stack::show()
{
    for(int j=size; j>0; j--)
        {
            cout << pitem[j] << " ";
        }
    cout << "\n";
    cout << size << "\n";
    cout << top << "\n";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdafx.h>
#include <iostream>
#include "incl.h"
#include "project131.cpp"
 
using namespace std;
 
 
    int main()
{   
    stack stackobj1;
    stack stackobj2(5);
 
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 07:00     error C2668 #2
Первая ошибка
У вас есть два конструктора:
C++
1
2
stack::stack();
stack::stack(int n = 1);
Какой из них использовать в этом случае?
C++
1
stack stackobj1;
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 179
25.03.2011, 08:08  [ТС]     error C2668 #3
bigredcat,
stack stackobj1();
я вот так написал вроде заработало(правильно?)
Вообще второй конструктор с параметрами почему выдавал ошибку?
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
25.03.2011, 08:30     error C2668 #4
Цитата Сообщение от korez Посмотреть сообщение
bigredcat,
stack stackobj1();
я вот так написал вроде заработало(правильно?)
Вообще второй конструктор с параметрами почему выдавал ошибку?
Как вы себе представляете инициализацию и задание значение переменной, которую конструктор будет потом получать из-вне???

C++
1
2
3
void barbeq::barbeq(int meatAmount) {
   this->stakes = meatAmount * .7;
}
Переменная int meatAmount задается конструктором при создании класса, и после завершения работы конструктора автоматически удаляется.

C++
1
2
3
barbeq myFirstBarbeq(4);
 
cout << myFirstBarbeq.getStakesAmount();
В этом примере мы устанавливаем значение int meatAmount равное 4, переменная stakes получает значение 4*.7 = 2.8.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 10:44     error C2668 #5
Цитата Сообщение от korez Посмотреть сообщение
bigredcat,
stack stackobj1();
я вот так написал вроде заработало(правильно?)
Вообще второй конструктор с параметрами почему выдавал ошибку?
Не знаю что там у вас заработало... По поводу конструктора. Вот есть инициализирующий конструктор stack(int n = 1). Поскольку все параметры этого конструктора иммеют значения по умолчанию, то он является одновременно и конструктором по умолчанию. Но в тоже время вы определяете конструктор по умолчанию отдельно stack(). Вот и возникает неоднозначность какой из этих двух конструкторов вызывать в данном случае stack stackobj1;
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 179
25.03.2011, 19:06  [ТС]     error C2668 #6
получается если в конструкторе все аргументы имеют инициализацию по умолчанию он сам становится конструктором по умолчанию?
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 19:09     error C2668 #7
Да, так
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
01.11.2011, 16:14     error C2668 #8
Окончательная версия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
const double Pi=3.14;
double exp=1.0;
double x;
double y, z;
 
x=acos((Pi-z)/3)+exp;
 
z=sqrt(abs(y+sin(y*y)));
 
y=0.3*(log10(pow(exp,-2.3)));
 
system ("pause");
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 19:04     error C2668
Еще ссылки по теме:

C++ Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции
C++ Ошибка error C2668
C++ Error LNK1120, error LNK2019, error LNK2028, queue

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
01.11.2011, 19:04     error C2668 #9
Цитата Сообщение от korez Посмотреть сообщение
получается если в конструкторе все аргументы имеют инициализацию по умолчанию он сам становится конструктором по умолчанию?
Не получается так, а это следует из определения конструктора по умолчанию в языке С++. То есть конструктор, который может быть вызван без аргументов, является конструктором по умолчанию.

В вашем определении класса два конструктора могут быть вызваны без аргументов. Поэтому компилятор не знает, какой из них вызывать.
Yandex
Объявления
01.11.2011, 19:04     error C2668
Ответ Создать тему
Опции темы

Текущее время: 02:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru