Ошибка связывания при доступе к статической переменной-члену шаблона класса - PullRequest
0 голосов
/ 03 октября 2019

Я получаю ошибку компоновки при попытке скомпилировать следующее:

У меня есть заголовок, содержащий класс: ("ах")

#pragma once

class A
{
public:

    static const float a;
}

Соответствующее тело: ("a.cpp ")

#include "a.h"

const float A::a = 1.0f;

Основной файл выглядит следующим образом: (" main.cpp ")

#include "a.h"

template <class AA>
class AAA
{
public:

    AAA();
};

template <class AA>
AAA<AA>::AAA()
{
    auto a = AA::a;
}

int main(int argc, char* args[])
{
    AAA<A> aaa;
}

Если я поместил содержимое" a.cpp "в заголовок, Я получаю ошибку «multiplyfined ...» при компиляции.

Мне удалось избавиться от проблемы, поместив содержимое «a.cpp» в заголовок и заключив все в безымянное пространство имен:


Тем не менее, я не думаю, что это лучшее решение.

Не могли бы вы предложить лучшее решение?

(PS. Я использую Visual Studio 2019версии 142 и 10.0.18362.)

...