Я новичок в C ++ и имею небольшой заголовочный файл в C ++ с простой структурой в нем.
PGNFinder.h:
#ifndef PGNFINDER_H
#define PGNFINDER_H
struct Field
{
int Order;
string Name;
//more variables but doesn't matter for now
};
#endif
Это дает следующие ошибки:
error C2146: syntax error : missing ';' before identifier 'Name'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
когда я изменяю это на:
struct Field
{
int Order;
std::string Name;
};
Выдает ошибку в файле .exe и .obj
error LNK1120: 1 unresolved externals (in the .exe file)
error LNK2019: unresolved external symbol "int __cdecl Convert::stringToInt(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?stringToInt@Convert@@YAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "private: void __thiscall CAN::calculateMessageLength(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?calculateMessageLength@CAN@@AAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
и когда я добавлю
#include <string>
и вернитесь к
string Name;
Выдает те же ошибки, что и в начале.
Так почему же заголовочный файл не может распознать int и строку?
Спасибо за помощь 🙂
Для того, чтобы использовать string
как тип переменной, вам нужно
#include <string>
)std::string
или с помощью директории using using namespace std;
Обратите внимание, однако, что using
не рекомендуется в заголовочных файлах (см. "используя пространство имен" в заголовках с ++)Если вы попробуете только один из них, это не сработает.
Однако ваше второе сообщение об ошибке указывает на проблему с компоновщиком.
Так как я склонен использовать функцию комментирования слишком часто.
Ваша проблема — отсутствие включения, и когда вы включили string.h, вы все еще забыли пространство имен std в «классе строк».
Так что либо используйте using namespace std
(для начинающих лучше всего практиковаться, так как большинство вещей, скорее всего, будут стандартными)
или объявите вашу строку как std :: string в вашей структуре.
изменение его на std :: string явно исправляет ошибку компилятора.
Тогда у вас есть ошибка компоновщика, которая не связана с этой строкой кода. Похоже, у вас есть класс ‘Convert’ с отсутствующей реализацией функции ‘stringToInt’.