작성
·
205
0
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node{
int num;
vector<int> links;
};
Node A[40];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int num = 2;
for (int i = 0; i < 19; i++){
vector<int> v;
v.push_back(i+1);
A[i] = {num,v};
num+=2;
}
for (int i = 0; i < 19; i++){
cout << A[i].num << " ";
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node{
int num;
vector<int> links;
Node(int NUM,vector<int> LINKS) : num(NUM),links(LINKS){}
};
Node A[20];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int num = 2;
for (int i = 0; i < 19; i++){
vector<int> v;
v.push_back(i+1);
A[i] = Node(num,v);
num+=2;
}
for (int i = 0; i < 19; i++){
cout << A[i].num << " ";
}
}
첫번째 코드는 정상작동되는데, 두번째 코드는 error: no matching function for call to ‘Node::Node()’
14 | Node A[20];
이런 오류코드를 띄웁니다.두번째 코드에 이상이 없다고 생각하는데 왜 저런 오류가 나는지 궁금합니다.
답변 2
0
0
안녕하세요 동훈님 ㅎㅎ
간단하게 이렇게 만드는 것도 괜찮습니다. 이 코드는 생성자 없이 정의하는 코드이고 이 코드를 기반으로 만약 초기화를 한다면 수동으로 다음과 같이 초기화를 해야 합니다.
Node n; n.num = 5; n.links = {1, 2, 3};
struct Node{
int num;
vector<int> links;
};
다만 구조체 - 커스텀 operator를 구현할 경우에는 꼭 이렇게 만들어주셔야 하구요.
struct Point{
int y, x;
Point(int y, int x) : y(y), x(x){}
Point(){y = -1; x = -1; }
bool operator < (const Point & a) const{
if(x == a.x) return y < a.y;
return x < a.x;
}
};
동훈님의 에러 코드를 보시면 어떤 매개변수를 받아서 해당 멤버변수를 정하는 constructor가 정의되어있습니다. 이 의미는 앞으로 Node를 생성할 때 생성자를 기반으로 생성한다는 의미입니다.
Node(int NUM, vector<int> LINKS) : num(NUM), links(LINKS){}
그러나 이부분
Node A[20];
매개변수가 정해져있지 않고 그저 노드를 생성하는 부분 때문에 에러가 뜨는 것인데요.
생성자(constructor)를 정의했기 때문에 컴파일러는 노드를 생성할 때 생성자부분을 찾습니다.
그러나 생성자에서 매개변수 없이 생성하는 로직 자체가 없기 때문에 에러가 뜨게 됩니다.
a.cpp:24:16: error: no matching constructor for initialization of 'Node'
그렇기 때문에 이렇게 만들어주셔야 합니다.
struct Node {
int num;
vector<int> links;
Node(int NUM, vector<int> LINKS) : num(NUM), links(LINKS) {}
Node() {
num = 1;
}
};
이렇게 하셔도 되고.
struct Node {
int num;
vector<int> links;
Node(int NUM, vector<int> LINKS) : num(NUM), links(LINKS) {}
Node() : num(1), links() {}
};
이렇게 하셔도 됩니다. 같은 의미입니다.
테스트 코드는 다음과 같습니다.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node {
int num;
vector<int> links;
Node(int NUM, vector<int> LINKS) : num(NUM), links(LINKS) {}
Node() {
num = 1;
}
};
Node A[40];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cout << A[0].num << "\n";
cout << A[0].links.size() << "\n";
}
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.