строка — ошибка C ++, предполагается C4430 int

Я новичок в 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 и строку?

Спасибо за помощь 🙂

1

Решение

Для того, чтобы использовать string как тип переменной, вам нужно

  • включить заголовок, в котором он объявлен (#include <string>)
  • используйте полный квалифицированный тип, такой как std::string или с помощью директории using using namespace std; Обратите внимание, однако, что using не рекомендуется в заголовочных файлах (см. "используя пространство имен" в заголовках с ++)

Если вы попробуете только один из них, это не сработает.

Однако ваше второе сообщение об ошибке указывает на проблему с компоновщиком.

2

Другие решения

Так как я склонен использовать функцию комментирования слишком часто.

Ваша проблема — отсутствие включения, и когда вы включили string.h, вы все еще забыли пространство имен std в «классе строк».

Так что либо используйте using namespace std (для начинающих лучше всего практиковаться, так как большинство вещей, скорее всего, будут стандартными)
или объявите вашу строку как std :: string в вашей структуре.

0

изменение его на std :: string явно исправляет ошибку компилятора.

Тогда у вас есть ошибка компоновщика, которая не связана с этой строкой кода. Похоже, у вас есть класс ‘Convert’ с отсутствующей реализацией функции ‘stringToInt’.

0
По вопросам рекламы [email protected]