Это очень любительский вопрос, и я уверен, что это будет очень простой ответ, но я не могу понять проблему. У меня есть заголовочный файл с соответствующим файлом .cpp, но по какой-то причине, когда я пытаюсь компилировать с г ++, я получаю ошибку:Ошибка: декларация ничего не объявляет
declaration does not declare anything
Я уверен, что проблема в том, что я не инициализируя (только) переменную в файле, но я не уверен, для чего ее инициализировать. Если кто-то может помочь, я бы очень признателен! Вот мои файлы:
SymbolTableDictionary.h
#ifndef SymbolTable
#define SymbolTable
#include <new>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
#pragma once
struct Symbol
{
std::string Name;
int Address;
Symbol::Symbol()
{ }
Symbol::Symbol(const string name, int address)
{
std::string sym(name);
this->Name = sym;
this->Address = address;
}
};
extern map<std::string, Symbol> SymbolTable;
#endif
SymbolTableDictionary.cpp
#include <new>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <map>
#include "SymbolTableDictionary.h"
using namespace std;
map<std::string, Symbol> SymbolTable;
Ошибки компиляции:
In file included from SymbolTableDictionary.cpp:8:0:
SymbolTableDictionary.h:18:5: error: extra qualification ‘Symbol::’ on member ‘Symbol’ [-fpermissive]
SymbolTableDictionary.h:21:5: error: extra qualification ‘Symbol::’ on member ‘Symbol’ [-fpermissive]
SymbolTableDictionary.h:29:8: error: declaration does not declare anything [-fpermissive]
SymbolTableDictionary.cpp:12:1: error: declaration does not declare anything [-fpermissive]
Вы должны избегать '' и '' в большинстве программ на С ++, не говоря уже о '' и' '. Кроме того, обычно считается, что не рекомендуется использовать 'using namespace std;', и считается невоспитанным, чтобы добавить его в заголовок. Это поможет, если вы определили строку, в которой компилятор сообщает об этой проблеме. –
Я предлагаю использовать защитники заголовков с некоторыми вариациями на тему '#ifndef SYMBOLTABLEDICTIONARY_H_INCLUDED' (все кепки, основанные на имени файла, маловероятны для использования в других целях). Еще одно разумное предложение - использовать имя, основанное на хеше MD5 содержимого некоторой версии файла: '#ifndef H_779f06b8e4323b7991ddfd9078d79923', возможно. –
Тот факт, что заголовок заголовка и имя переменной были одинаковыми, вызвали эту проблему. Не могу поверить, что раньше этого не видел. Спасибо всем за помощь! Очень признателен! –