C++에 대한 자습서를 작성하여 솔직하게 말해서 정말 훌륭하고 강력한 언어이기 때문에 실제로 그 핵심을 파헤 웁니다. 나는 아직도 상당히 새롭고 ostream 연산자에 대한 연산자 오버로딩 문제가 있습니다.C++ Ostream Operator 오버로드 - 빌드 할 때 정의되지 않은 참조가 누락되었습니다.
이 튜토리얼은 혼동을 피하기 위해 가능한 한 체계적이고 모듈 식으로 코드를 유지하려고합니다. - 연습을 실행
- MAIN.CPP : 내 코드에 3 개 개의 층이 있습니다.
- Exercises.cpp/Exercises.h - 연습용 정적 함수가 포함되어 있습니다.
- ComplexNumber.cpp/ComplexNumber.h - 튜토리얼에 따라 복소수 객체를 나타냅니다.
메인은 매우 간단합니다 : Exercises :: ExerciseName()에 대한 호출 집합.
Exercises.cpp :
#include "Exercises.h"
void Exercises::ComplexNumberClass() {
ComplexNumber c; /** Runs the blank constructor */
ComplexNumber c1(2, 3); /** Runs the args-filled constructor */
ComplexNumber c2 = c1; /** Runs the copy constructor */
c = c2;
cout << c1 << endl;
}
헤더 파일 만 공용 정적 무효 기능, 즉 호출하고 실행하는 기능 등의 헤더를 갖는다.
ComplexNumber.cpp을 (생성자와 접근없이) :
#include "ComplexNumber.h"
using namespace ComplexNumbers;
using namespace std;
ostream& operator<< (ostream& out, ComplexNumber& num){
out << "(" << num.GetReal() << ", " << num.GetImaginary() << ")";
return out;
}
const ComplexNumber &ComplexNumber::operator=(const ComplexNumber &num) {
cout << "Using assignment operator override" << endl;
real = num.real;
imaginary = num.imaginary;
return *this;
}
ComplexNumber.h :
#ifndef OPERATOROVERLOADING_COMPLEXNUMBER_H
#define OPERATOROVERLOADING_COMPLEXNUMBER_H
#include <iostream>
using namespace std;
namespace ComplexNumbers {
class ComplexNumber {
private:
double real;
double imaginary;
public:
ComplexNumber();
ComplexNumber(double real, double imaginary);
ComplexNumber(const ComplexNumber &num);
const ComplexNumber &operator=(const ComplexNumber &num);
double GetReal() const {
return real;
}
double GetImaginary() const {
return imaginary;
}
};
ostream &operator<<(ostream& out, ComplexNumber& num);
}
#endif //OPERATOROVERLOADING_COMPLEXNUMBER_H
나는 (내가 틀렸다면 수정하시기 바랍니다) 문제가 생각하는 곳 ComplexNumber 객체 파일은 나는이를 빌드 할 때
, 그것은 '(:: ComplexNumber 객체 &을 cave_of_programming, 표준 : : ostream에 &) cave_of_programming :: 연산자 < <'난에 "정의되지 않은 참조가 내게 말하고있다. 방법 헤더가 일치하고 Jetbrains Clion으로 구축하고 있습니다.
내 연구에 따르면 문제가 링커에 있음을 알았지 만 CMakeLists.txt를보고 해당 파일을 모두 연결하는 것으로 나타났습니다.
SOURCE_FILES main.cpp Exercises.cpp Exercises.h ComplexNumbers/ComplexNumber.cpp ComplexNumbers/ComplexNumber.h
아무도 왜 이것이 작동하지 않는지에 대한 아이디어가 있습니까? 내가 뭘 놓치고 있니?