Static constructor in c++ and fatal error LNK1120: 1 unresolved externals

前端 未结 4 761
不知归路
不知归路 2021-01-23 23:36

To start with i should probably let you know that i am by no means a programmer, and i\'m just doing this for a homework assignment, so if it\'s possible i will require a really

相关标签:
4条回答
  • 2021-01-23 23:43

    I used to fall foul of that too. Then I read an article by Scott Meyers. He recommended a function static, rather than class static variable. This means you declare and define a variable all in one place. The following prints:

    0 1 2 3 4 5 6 7 8 9

    #include <iostream>
    
    int next_index(void)
    {
      static int index = 0;
      return index++;
    }
    
    int main(void)
    {
      for (int i = 0; i < 10; ++i) {
        std::cout << next_index() << ' ';
      }
    }
    

    In your case, you'd put the following:

    Nod(Punct &temp)
     {  
         pct = temp;    
         index = next_index();
     }
    
    0 讨论(0)
  • 2021-01-23 23:54

    The problem is that Nod::ctr is only declared but not defined.

    class Nod
    {
        // Declare the counter variable
        static counter ctr;
    
        ...
    };
    
    // Define the counter variable
    counter Nod::ctr;
    

    The definition should of course be in a source file, not a header file, or you will get multiple definition errors instead.

    0 讨论(0)
  • 2021-01-23 23:55

    From the description of your problem ,the solution is far simpler.

    You have complicated a simple issue, just use

    class Nod   
    {  
    static int ctr;
    
    public: 
     int index;      
       Nod()
     {  
         ctr++;  //Increment the counter every time a object is created
     }
     Nod() {}   
    }; 
    
    
    //Allocate memory also
    
    int Nod::ctr;
    

    If there are more than 1 type of constructor, add the counter increment in every constructor.

    0 讨论(0)
  • 2021-01-24 00:09

    A static data member is declared in a class, but it must be defined in exactly one translation unit (= .cpp file). Put the following into one .cpp file (preferably Nod.cpp):

    counter Nod::ctr;
    

    BTW, you could have just used an int instead of a custom class counter.

    0 讨论(0)
提交回复
热议问题