2

テンプレートを使用して独自のコンテナを作成する課題に取り組んでいます。私が使用する必要があるコンテナーは Smaph と呼ばれ、2 組の数値を受け取り、さまざまな機能を実行します。この課題のヘッダー ファイルの作成のみ許可されています。テンプレート引数を 1 つ取る単一リンク クラス slink を作成しました。

現在、私はテンプレートの感触をつかみ、それらの使用方法を学ぼうとしているので、非常に簡単な例を用意して、あなたが助けてくれることを望んでいました. テンプレートに追加する単一リンク リスト クラスに push_back 関数があります。何らかの理由で、「メンバー関数の無効な使用 (push_back)、( ) を忘れましたか?」というコンパイル時エラーが発生するため、slink に何かを追加できません。このエラーが発生する理由を誰かに説明してもらえますか? ありがとうございました!

template <typename T>
class slink {
  private:
    struct node {
    T datum;
    struct node *next;
    };
    node *head, *tail;
  public:
     slink() : head(0), tail(0) {
    }

    ~slink() {
    clear();
    }
    void push_back(const T &datum) {
    node *p = new node;
    p->datum = datum;
    p->next = 0;
    if (!tail)      
        head = p;
    else
        tail->next = p;
    tail = p;
    }

template <typename Tfirst, typename Tsecond>
class Smaph {

    public:
        Smaph();
        ~Smaph();
        Smaph(const Tfirst a, const Tsecond b) {
            std::pair<Tfirst, Tsecond> pair1(a, b);
            s.push_back(pair1);
        }
    private:

        slink<std::pair<Tfirst, Tsecond> > s();


};

そして最後に、プログラムをテストするためのメインです。私が今したいのは、これらの 2 つの数値を、Smaph を介して単一リンク リストに追加することだけです。

int main() {
        Smaph<int, double> s(3, 6.3);
}
4

2 に答える 2

3
slink<std::pair<Tfirst, Tsecond> > s();

これは、s引数を取らずに を返す関数の宣言ですslink<std::pair<Tfirst, Tsecond> >。コンパイラはs.push_back(pair1);、あなたが . を削除し()てデータ メンバーにします。

slink<std::pair<Tfirst, Tsecond> > s;
于 2013-05-01T21:09:45.867 に答える
1

この行で、次のことを行いました。

slink<std::pair<Tfirst, Tsecond> > s();

sこれは、を返すという名前の関数を宣言していますslink<std::pair<Tfirst, Tsecond> >。しかし、その後、メンバー関数の 1 つの中でこれを行いました。

s.push_back(pair1);

それは正しくないため、コンパイラはこのメンバー関数の無効な使用を警告します。

修正するには、パラメーターを削除します。

slink<std::pair<Tfirst, Tsecond> > s;
于 2013-05-01T21:09:54.920 に答える