Почему BigQuery внезапно выдает ошибку формата данных

В основном это связано с тем, что статические члены должны быть определены точно в одной единице перевода, чтобы не нарушать правило One-Definition . Если язык должен был разрешить что-то вроде:

struct Gizmo
{
  static string name = "Foo";
};

, тогда в каждой единицы перевода будет определено name, что #include s этот файл заголовка.

C ++ позволяет вам для определения интегральных статических членов в объявлении, но вы все равно должны включать определение в пределах одной единицы перевода, но это всего лишь ярлык или синтаксический сахар. Таким образом, это разрешено:

struct Gizmo
{
  static const int count = 42;
};

Пока a) выражение является const интегральным или перечисляемым типом, b) выражение может быть оценено во время компиляции, и c) все еще определение где-то, что не нарушает одно правило определения:

file: gizmo.cpp

#include "gizmo.h"

const int Gizmo::count;

1
задан Max Sfnv 18 March 2019 в 17:58
поделиться