Я новичок в C ++ 17. Учитывая следующий код:
// ---------------
// in MyClass.hpp
// ---------------
#pragma once
class MyClass {
public:
static const int A;
};
inline const int MyClass::A = 100;
// ---------------
// in test.cpp
// ---------------
#include <stdio.h>
#include "MyClass.hpp"
void test() {
printf("test: %p\n", &MyClass::A);
}
// ---------------
// in main.cpp
// ---------------
#include <stdio.h>
#include "MyClass.hpp"
extern void test();
int main() {
printf("main: %p\n", &MyClass::A);
test();
}
При компиляции с MinGW-W64 g ++ 8.1.0
g++ -std=c++17 main.cpp test.cpp -o test.exe
Выход
main: 00000000004044B0
test: 00000000004044B0
, который работает как положено.
Однако в MSVC 2017
cl /std:c++17 main.cpp test.cpp
Я получил ошибку компилятора, сказав переопределение «public: static int const MyClass :: A». (Извините, вывод компилятора содержит китайские иероглифы. Не следует публиковать здесь напрямую.)
Почему код работает под g ++, но не работает в MSVC? Я сделал что-то не так?