Что подразумевается под «переменной данных»?

Что означает «переменная данных» в MSVS2010 в этой ошибке? Я думал, что объявляю символ, который определен в другом месте моего кода.

ошибка C2365: 'g_surf': переопределение; предыдущее определение было "переменная данных"

Очевидно, это может означать int или char.
Я последовал рабочему примеру.
Мне пришлось включить определение класса перед объявлением символа.

#include classdef.h

Я использовал ключевое слово extern для объявления объекта в stdafx.h.

extern COriginal g_orig;//works
extern CClass g_surf;//how is this declaration resulting in a 'data variable'  type?

Я создаю экземпляр класса в файле кода (в глобальном пространстве). Вот где возникает ошибка.

COriginal g_orig(CONST_ARGUMENT);//works
CClass g_surf();//seen as redefinition.

Я создал класс из двух других классов, потому что мне нужны атрибуты из обоих.

Я могу найти другие вопросы переопределения, которые не дают понимания этого. Я не нашел ни в MSVS2010, ни в Интернете, что подразумевается под «переменной данных».


person Jaden    schedule 03.11.2014    source источник
comment
Что еще попадает в группу «переменные данных»? Это где-то определено? Или я просто помню, что означают сообщения об ошибках, когда их части не определены?   -  person Jaden    schedule 03.11.2014


Ответы (2)


Вероятно, вы хотели вызвать конструктор без параметров.

CClass g_surf;

Для вашего компилятора эта строка

CClass g_surf();

- это предварительное объявление метода g_surf, не принимающего параметров и возвращающего CClass.

person nvoigt    schedule 03.11.2014
comment
Теперь это выглядит глупо, когда мне нужно было знать, что они имели в виду под переменной данных, вместо того, чтобы сосредоточиться на всей части переопределения. - person Jaden; 03.11.2014
comment
Что ж, вы, вероятно, имели в виду предположения. Но ваш компилятор не догадывается, что вы имели в виду, он просто говорит вам, что не так :) - person nvoigt; 03.11.2014
comment
Это не казалось направленным на мой вопрос, но решило проблему. Другая проблема, сообщения об ошибках компилятора, сама по себе беспорядок. - person Jaden; 28.09.2015

«Переменная данных» действительно включает символы, объявленные с типами классов.
Итак, я пытался переопределить тип символа на что-то другое.
Я пытался использовать тот же символ для объявления функции.

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

person Jaden    schedule 03.11.2014