স্থির সদস্য ফাংশন ত্রুটি; কিভাবে স্বাক্ষরটি সঠিকভাবে লিখবেন?


165

বর্তমান স্বাক্ষরটি ব্যবহার করে আমার কোডটি জি ++ তে সংকলনের চেষ্টা করার সময় আমি একটি ত্রুটি পেয়েছি:

cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage

আমার প্রশ্ন দ্বিগুণ:

  1. এটি কেন এইভাবে সংকলন করে না?
  2. সঠিক স্বাক্ষর কী এবং কেন?

সি ++ ব্যবহার করার সময় স্বাক্ষরগুলি সর্বদা আমার মৃত্যু

সম্পাদনা করুন: এখানে শ্রেণীর শিরোনাম ফাইলটিও রয়েছে:

class Foo {


public:
    Foo();

    ~Foo();

    bool insert(const Foo2 &v);

    Foo * find(const Foo2 &v);

    const Foo * find(const Foo2 &v) const;

    void output(ostream &s) const;

private:
    //Foo(const Foo &v);
    //Foo& operator =(const Foo &v);
    //Not implemented; unneeded


    struct Node {
        Foo2 info;
        Node *left;
        Node *right;
    };

    Node * root;

    static bool insert(const Foo2 &v, Node *&p);


    static void output(ostream &s, const Node *p);


    static void deleteAll(Node *p);

আপনার g ++ ত্রুটি থেকে সমস্ত প্রাসঙ্গিক লাইন অন্তর্ভুক্ত করা উচিত ।
কিথ লেন

5
আপনার তালিকাভুক্ত ত্রুটি বার্তাটি আপনি পোস্ট করেছেন এমন কোড দ্বারা উত্পাদিত হতে পারে না। Foo::Barআপনার প্রোগ্রাম খণ্ডের কোথাও নেই । দয়া করে একটি সম্পূর্ণ , ন্যূনতম প্রোগ্রাম পোস্ট করুন যা আপনার মধ্যে থাকা ত্রুটিটি দেখায়। একটি সম্পূর্ণ প্রোগ্রাম হ'ল যা আমরা ঠিক যেমনটি ঠিক তেমনভাবে সংকলন করতে পারি এবং আপনার মতো একই ত্রুটি বার্তাটি পেতে পারি। একটি ন্যূনতম প্রোগ্রাম হ'ল প্রতিটি ত্রুটি আপনার ত্রুটি অপসারণের সাথে সম্পর্কিত নয়। আপনার পোস্ট করা কোডের খণ্ডটি সম্পূর্ণ বা ন্যূনতমও নয়। আরও তথ্যের জন্য sscce.org দেখুন ।
রোব

উত্তর:


415

আমি অনুমান করছি আপনি এরকম কিছু করেছেন:

class Foo
{
    static void Bar();
};

...

static void Foo::Bar()
{
    ...
}

" static void Foo::Bar" ভুল। আপনার দ্বিতীয়টির দরকার নেই " static"।


25
@ অলিভার: তবে কেন?
নারেঙ্গি

14
@ নারেঙ্গি: কারণ সি ++ স্ট্যান্ডার্ড ব্যাকরণকে কীভাবে সংজ্ঞায়িত করে।
অলিভার চার্লসওয়ার্থ

2
"দ্বিতীয়" কোনটি? ঘোষক একটি বা তার ফাংশন সংজ্ঞা?

44
@ জাইবিস দ্বিতীয়টি প্রথম নয়, দ্বিতীয়টি।
সর্বোচ্চদেব

24
কীওয়ার্ড স্ট্যাটিকের কার্য ঘোষণার চেয়ে পদ্ধতি ঘোষণায় একই অর্থ হয় না। এবং কোনও ফাংশন (সংজ্ঞা) স্থির হতে পারে না যদি এটি শ্রেণীর 'পদ্ধতি (ঘোষণা) হয়) সুতরাং, আপনি এটি স্থির ঘোষণা করতে পারেন, তবে এটি স্থির হিসাবে সংজ্ঞায়িত করতে পারবেন না। ফাংশন সংজ্ঞাতে 'স্ট্যাটিক' এর সি এর মতো একই অর্থ রয়েছে, যা কোনও শ্রেণি পদ্ধতির সাথে বেমানান।
দবিচো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.