Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
#1

error C2668 - C++

25.03.2011, 04:27. Просмотров 1241. Ответов 8
Метки нет (Все метки)

ошибка
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2011, 04:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос error C2668 (C++):

Ошибка error C2668 - C++
что я должен там написать visual studio 2010 #include &lt;vector&gt; #include &lt;string&gt; #include &lt;windows.h&gt; #include &lt;iostream&gt; ...

Error C2668: pow: неоднозначный вызов перегруженной функции - C++
#include &lt;math.h&gt; //библиотека, содержащая описание математических операторов #include &lt;conio.h&gt; //библиотека, содержащая описание...

Error C2668: 'sqrt' : ambiguous call to overloaded function - C++
Собственно задание: треугольник задан координатами своих вершин. Найти его периметр и площадь Вот Код,но он почему не работате выдает...

Error C2668: sqrt: неоднозначный вызов перегруженной функции - C++
Что не так? Ma= sqrt ((2*b^2 + 2 * c^2 - a^2)/4); Mb= sqrt ((2*a^2 + 2 * c^2 - b^2)/4); Mc= sqrt ((2*a^2 + 2 * b^2 - b^c)/4); ...

Error C2668: std::to_string: неоднозначный вызов перегруженной функции - C++
вот код #include &quot;stdafx.h&quot; #include &lt;Windows.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int...

Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции - C++ - C++
Мне выкидывает ошибку при сборке. 1&gt; CCRakNetSlidingWindow.cpp 1&gt;..\Common\RakNet\CCRakNetSlidingWindow.cpp(221): error C2668: abs:...

8
bigredcat
368 / 315 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 07:00 #2
Первая ошибка
У вас есть два конструктора:
C++
1
2
stack::stack();
stack::stack(int n = 1);
Какой из них использовать в этом случае?
C++
1
stack stackobj1;
1
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
25.03.2011, 08:08  [ТС] #3
bigredcat,
stack stackobj1();
я вот так написал вроде заработало(правильно?)
Вообще второй конструктор с параметрами почему выдавал ошибку?
0
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
25.03.2011, 08:30 #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.
1
bigredcat
368 / 315 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 10:44 #5
Цитата Сообщение от korez Посмотреть сообщение
bigredcat,
stack stackobj1();
я вот так написал вроде заработало(правильно?)
Вообще второй конструктор с параметрами почему выдавал ошибку?
Не знаю что там у вас заработало... По поводу конструктора. Вот есть инициализирующий конструктор stack(int n = 1). Поскольку все параметры этого конструктора иммеют значения по умолчанию, то он является одновременно и конструктором по умолчанию. Но в тоже время вы определяете конструктор по умолчанию отдельно stack(). Вот и возникает неоднозначность какой из этих двух конструкторов вызывать в данном случае stack stackobj1;
1
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
25.03.2011, 19:06  [ТС] #6
получается если в конструкторе все аргументы имеют инициализацию по умолчанию он сам становится конструктором по умолчанию?
0
bigredcat
368 / 315 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
25.03.2011, 19:09 #7
Да, так
1
hoot
101 / 22 / 5
Регистрация: 10.11.2010
Сообщений: 208
01.11.2011, 16:14 #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;
}
0
Сыроежка
Заблокирован
01.11.2011, 19:04 #9
Цитата Сообщение от korez Посмотреть сообщение
получается если в конструкторе все аргументы имеют инициализацию по умолчанию он сам становится конструктором по умолчанию?
Не получается так, а это следует из определения конструктора по умолчанию в языке С++. То есть конструктор, который может быть вызван без аргументов, является конструктором по умолчанию.

В вашем определении класса два конструктора могут быть вызваны без аргументов. Поэтому компилятор не знает, какой из них вызывать.
0
01.11.2011, 19:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 19:04
Привет! Вот еще темы с ответами:

Ошибка 2, error C2668: pow: неоднозначный вызов перегруженной функции - C++
Пытаюсь разобраться с функциями. И потому усложнил обычный пример. Вылезла ошибка: Ошибка 2, error C2668: pow: неоднозначный вызов...

Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции - C++
Мне выкидывает ошибку при сборке. 1&gt; QueueTest.cpp 1&gt;c:\documents and settings\администратор\рабочий...

Ошибка в программе error C2668: std::to_string: неоднозначный вызов перегруженной функции - C++
FILE *f1; f1 = fopen(&quot;matrix.txt&quot;, &quot;w&quot;); for (unsigned int i = 0; i &lt; matrix.size(); i++) { vector&lt;double&gt; s =...

Ошибка C2668: mult: неоднозначный вызов перегруженной функции - C++
Помогите пожалуйста, не знаю как правильно избавиться от ошибки. Исчезает только если из объявления в параметрах (33 строчка) убрать...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru