Сначала вы должны увидеть ниже код -C++ конструктор «неоднозначным», - но на самом деле это не
#include <iostream>
using std::cout; using std::endl ;
class test
{
private:
int data1, data2 ;
public:
test(int data1 = 1) {
this->data1 = data1 ; this->data2 = -1;
}
test(int data1 = 1, int data2 = 2) {
this->data1 = data1 ; this->data2 = data2 ;
}
};
и это главное -
int main()
{
test t1(1) ;
test t2(1, 2);
return 1 ;
}
Здесь вы можете увидеть I Я использую два типа конструктора по умолчанию с разными инициализаторами, но когда я пытаюсь скомпилировать, компилятор говорит, что аргументы конструктора являются «неоднозначными». Более того, в конце сообщения компилятора сказано что-то о constexpr
- о котором я не знаю, что это такое.
что мне не хватает?
и вот сообщение об ошибке компилятора -
test.cpp: In function ‘int main()’:
test.cpp:19:11: error: call of overloaded ‘test(int)’ is ambiguous
test t1(1) ;
^
test.cpp:19:11: note: candidates are:
test.cpp:12:3: note: test::test(int, int)
test(int data1 = 1, int data2 = 2) {
^
test.cpp:9:3: note: test::test(int)
test(int data1 = 1) {
^
test.cpp:4:7: note: constexpr test::test(const test&)
class test
^
test.cpp:4:7: note: constexpr test::test(test&&)
Почему вы думаете, что они не двусмысленны? –
'Я использую два типа конструктора по умолчанию с различным инициализатором', и там проблема. – PaulMcKenzie
сторона примечание: 'return 1;' -> 'return 0;' или не помещать 'return' в main вообще –