0

オーバーロードされた挿入演算子を持つクラスがあり、ドライバーで動作します。

#include <iostream>
#include <cstdlib>
#include "xml_attribute.h"

int main(){
    using namespace std;

    XML_AttributeT a("name","value");
    cout << a << endl;

    return EXIT_SUCCESS;
}

出力: name="value"
が機能します。

このクラスを含む別のクラスでこの機能を活用したい:
ヘッダー

#pragma once
#ifndef XML_ELEMENTT_H
#define XML_ELEMENTT_H

#include <string>
#include <vector>
#include <iostream>
#include "xml_attribute/xml_attribute.h"

struct XML_ElementT{

    std::string start_tag;
    std::vector<XML_AttributeT> attributes;
    bool single_tag;

    //Constructors
    explicit XML_ElementT(std::string const& start_tag, std::vector<XML_AttributeT> const& attributes, bool const& single_tag);
    explicit XML_ElementT(void);

    //overloaded extraction operator
    friend std::ostream& operator << (std::ostream &out, XML_ElementT const& element);

};
#endif

cpp

#include "xml_element.h"

//Constructors
XML_ElementT::XML_ElementT(std::string const& tag_, std::vector<XML_AttributeT> const& attributes_, bool const& single_tag_)
: start_tag{tag_}
, attributes{attributes_}
, single_tag{single_tag_}
{}
XML_ElementT::XML_ElementT(void){}

//overloaded extraction operator
std::ostream& operator << (std::ostream &out, XML_ElementT const& element){

    for (std::size_t i = 0; i < element.attributes.size()-1; ++i){
        out << element.attributes[i]; //<- Does not work
    }
    return out;// << element.attributes[element.attributes.size()-1];
}

エラー:

undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, XML_AttributeT const&)

どうすればこれを機能させることができますか?

4

1 に答える 1

2

`operator<<(std::basic_ostream<...>&, XML_AttributeT const&) への未定義の参照

このエラーは、コンパイラがコードを適切に解析したこと、および上記のシグネチャを持つ演算子の宣言があることを意味します。しかし、リンカーはプログラム内でその関数の定義を見つけられませんでした。これは、ライブラリーのリンクの失敗や、オペレーターが定義されている .o など、さまざまな原因で発生する可能性があります。

于 2012-09-19T02:32:05.817 に答える