C ++ Статическая переменная и нерешенная внешняя ошибка - PullRequest
0 голосов
/ 22 сентября 2011

Я надеялся, что смогу получить некоторые разъяснения по статическим переменным класса.

Например: У меня есть два разных класса, которые выполняют совершенно разные функции, альфа и бета. В альфе я объявляю статическую переменную типа бета, поэтому она выглядит так:

//alpha.h

#pragma once
#include <iostream>
#include "beta.h"

class alpha{
public: 
    alpha(){

    }

    static beta var; 

    void func(){
        var.setX(3);
    }

    void output(){

    }
};

//beta.h

#pragma once
#include <iostream>
using namespace std; 

class beta{

public: 

    int x; 
    char y; 

    beta(){
        x = 0; 
        y = ' '; 
    }

    void setX(int _X){
        x = _X; 
    }

};

//main.cpp

#include <iostream>
#include <iomanip>
#include "alpha.h"
using namespace std; 

int main(){
    alpha x, y, z; 
    x.func(); 
}

Теперь, когда я пытаюсь скомпилировать это, я получаю неразрешенную внешнюю ошибку:

ошибка LNK2001: неразрешенный внешний символ "public: static class beta alpha :: var "(? var @ alpha @@ 2Vbeta @@ A)

Я не уверен, что изменить или что еще мне нужно добавить, чтобы что-то вроде этого работало. Я хочу, чтобы x, y и z по существу разделяли одну и ту же бета-переменную. Я думаю, что могу сделать то же самое, просто передавая по одной бета-переменной в каждую из них. Но я хочу знать, возможно ли сделать то же самое, используя ключевое слово static, потому что статические члены класса имеют одинаковое значение в любом экземпляре класса. Если у меня нет этого определения неправильно.

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

статические переменные внутри класса все еще должны быть определены где-то, как методы:

Поместите это в main.cpp:

beta alpha::var;
4 голосов
/ 22 сентября 2011

Добавьте это в main.cpp:

beta  alpha::var;

var в h-файле является только объявлением типа.Переменная должна быть создана в некотором исходном файле.

...