c++ 클래스 템플릿 구현 후 main 함수에서 호출시 오류
글쓴이: cbh0819 / 작성시간: 수, 2022/11/09 - 5:58오후
Vector.h
#include <string> #include <iostream> #include <cmath> using std::cout; using std::endl; template <typename T> class Vector { private: T *data; // 각 블록 당 담고 있는 데이터 int length; // 컨테이너가 갖고 있는 전체 데이터의 개수 int capacity; // 컨테이너가 가질 수 있는 전체 데이터 용량 public: ... } template <typename V> Vector<V> inner_product(Vector<V> v1, Vector<V> v2) { Vector<V> temp(v1.size()); for (int i = 0; i < temp.size(); i++) temp.push_back(0); if (v1.size() != v2.size()) cout << "Incorrect Inner Product Try " << endl; for (int i = 0; i < v1.size(); i++) { temp[i] = v1[i] * v2[i]; } return temp; }
main.cpp
int main() { Vector<int> int_v1; Vector<int> int_v2; for (int i = 0; i < 5; i++) { int_v1.push_back(0); int_v2.push_back(i + 4); } cout << "size of v1: " << int_v1.size() << endl; cout << "Entry of v1: [ "; for (int i = 0; i < int_v1.size(); ++i) { cout << int_v1[i] << " "; } cout << "] " << endl; cout << "norm of v1: " << int_v1.norm() << endl; cout << endl; cout << "size of v2: " << int_v2.size() << endl; cout << "Entry of v2: [ "; for (int i = 0; i < int_v2.size(); ++i) { cout << int_v2[i] << " "; } cout << "] " << endl; cout << "norm of v2: " << int_v2.norm() << endl; cout << endl; Vector<int> int_v3(int_v1.size()); for (int i = 0; i < 5; i++) { int_v3.push_back(0); } cout << "v3's length: " << int_v3.size() << endl; cout << "inner product of vectors: [ "; int_v3 = inner_product(int_v1, int_v2); for (int i = 0; i < int_v1.size(); ++i) { cout << int_v3[i] << " "; } cout << "] " << endl; cout << endl; return 0; }
위와 같은 식으로 클래스에 대한 선언과 정의가 함께 포함된 Vector.h 파일과 이를 include 하여 main 함수 내에서 inner_product 함수를 실행하고자 합니다. 다만 실행시 다음과 같은 에러가 발생하는데, 이를 처리할 수 있는 방법이 있을까요?
error: lvalue required as left operand of assignment
temp[i] = v1[i] * v2[i];
추가로 inner_product 함수를 클래스 내 멤버함수로 넣어서 template 에 함께 걸리게(적절한 표현인지는 잘 모르겠습니다) 하여 사용할 수 있는 방법이 있다면 어떤 식으로 코드를 작성해야 할까요?
답변 미리 감사드립니다.
Forums:
Quote:error: lvalue required
대입문의 왼쪽 피연산자로는 lvalue가 필요하다고 합니다.
말인즉슨 지금은 lvalue가 아니라는 뜻이겠죠.
그렇다면 대체
temp[i]
는 무엇일까요?알 수 없습니다. 알려주지 않으셨으니까요.
temp
는Vector
타입 클래스 인스턴스인데, 여기에 subscript 연산을 적용했다는 것은 해당 연산자를 어디선가 오버로딩했다는 뜻이겠죠?아마도 아래와 같이 생략된 코드 어딘가에 연산자 오버로딩 함수가 있겠지요.
아마도 subscript 연산자를 오버로딩하면서 값을 반환하도록 작성하신 것 같은데, 참조를 반환하도록 해야 합니다.
댓글 달기