>source

여러 헤더와 소스 파일이있는 프로젝트가 있는데, 여기에서 중요하다고 생각하는 부분으로 단축했습니다. 다음과 같이 보입니다.

A.hpp :

#pragma once
struct date_t {
    unsigned int day{ 0 };
    unsigned int month{ 0 };
    unsigned int year{ 0 };
};

A.cpp :

#include <iostream>
#include "A.hpp"
using namespace std;
ostream& operator<<(ostream& output, const date_t& date) {
    output << date.month << "/" << date.day << "/" << date.year;
    return output;
}

B.hpp :

#pragma once
#include "A.hpp"
class B {
public:
    date_t date;
};

B.cpp :

#include <iostream>
#include "B.hpp"
using namespace std;
ostream& operator<<(ostream& output, B& b) {
    output << b.date;
    return output;
}

이 특별한 경우 B.cpp는 오류를 제공합니다. no operator "<<" matches these operands; operand types are: std::basic_ostream<char, std::char_traits<char>> << date_t . 오버로드 된 함수에서 매개 변수를 변경해야하는지 또는 이것이 액세스 문제인지 확실하지 않습니다. 왜 여기에서이 오류가 발생합니까? 후속 조치를 취하기 위해 삽입 과부하도 사용 된 경우 클래스 B에 유사한 문제가 발생합니까?

  • 답변 # 1

    당신은 정의했습니다 operator<< A.cpp에 있지만 헤더 파일에서도 선언해야하므로 다른 cpp 파일의 코드도 이에 대해 알고 있습니다.

    그냥 추가

    std::ostream& operator<<(std::ostream& output, const date_t& date);
    
    

    A.hpp로 (정의 후 struct date_t ). 추가해야합니다. #include <iostream> A.hpp에도.

    다른 삽입 연산자로 동일한 작업을 수행하십시오.

    하나의 cpp 파일에서 정의하지만 다른 cpp 파일에서 사용하려는 함수 또는 연산자는 헤더 파일에서 선언해야합니다.

관련 자료

  • 이전 typescript - 포착되지 않은 각도 오류 - 템플릿 구문 분석 오류 : 알려진 요소가 아닙니다
  • 다음 c++ - Omnet ++의 패킷에 cObject가 아닌 데이터 (사용자 지정 클래스) 추가