Error c2061 синтаксическая ошибка идентификатор string

Я пытаюсь изучать C ++, однако, параметр метода, который у меня есть в моем собственном классе, ведет себя неправильно. Когда он использует dataType типа...

Я пытаюсь изучать C ++, однако, параметр метода, который у меня есть в моем собственном классе, ведет себя неправильно. Когда он использует dataType типа int, он отлично работает без ошибок, но когда я пытаюсь изменить его на «string» dataType, программа вылетает с этой ошибкой.

Ошибка 1 ошибка C2061: синтаксическая ошибка: идентификатор ‘строка’ в файле temp.h ln
8 цв 1

Я использую следующие классы:

РАБОЧИЙ КОД
TesterClass.cpp // Точка входа

#include "stdafx.h"#include "Temp.h"
int _tmain(int argc, _TCHAR* argv[])
{
Temp tmp;
tmp.doSomething(7);

return 0;
}

Temp.h

#pragma once

class Temp
{
public:
Temp();

void doSomething(int blah);
};

Temp.cpp

#include "stdafx.h"#include "Temp.h"
#include <iostream>
#include <string>

using std::string;

Temp::Temp()
{
std::cout << "Entry" << std::endl;
string hi;
std::cin >> hi;
std::cout << hi << std::endl;
}

void Temp::doSomething(int blah)
{
std::cout << blah;
}

Сломанный код
Temp.h

#pragma once

class Temp
{
public:
Temp();

void doSomething(string blah);
};

Temp.cpp

#include "stdafx.h"#include "Temp.h"
#include <iostream>
#include <string>

using std::string;

Temp::Temp()
{
std::cout << "Entry" << std::endl;
string hi;
std::cin >> hi;
std::cout << hi << std::endl;
}

void Temp::doSomething(string blah)
{
std::cout << blah;
}

Когда я настраиваю параметр «blah» на строку, как в файле .h, так и в файле .cpp, возникает проблема.

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

using namepace std;
using std::string;
std::string instead of string
etc.

Если вы знаете, как решить мою проблему, я хотел бы услышать от вас. Я более чем рад предоставить больше информации.

-3

Решение

C ++ выполняет однопроходную компиляцию, поэтому std :: string необходимо объявить перед тем, как использовать его вообще — в том числе в заголовочном файле.

// Temp.h
#pragma once

#include <string>

class Temp
{
public:
Temp();

void doSomething(std::string blah);
};

Я бы посоветовал вам быть более точным в ваших заголовочных файлах при указании таких классов, потому что вы можете легко встретить другую библиотеку, которая определяет свою собственную string и тогда вы столкнетесь с конфликтами имен. Спасти using импортировать операторы для ваших файлов cpp.

0

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

У πάντα ῥεῖ был письменный ответ, спасибо!

Они сказали использовать std :: string при необходимости, а также #include <string> в заголовочном файле.

0

Содержание

  1. C2061: синтаксическая ошибка: идентификатор ‘строка’ — странное поведение
  2. Решение
  3. Другие решения
  4. ошибка C2061: синтаксическая ошибка: идентификатор ‘строка’
  5. 1 ответы
  6. C ++: синтаксическая ошибка C2061: неожиданный идентификатор
  7. 5 ответы
  8. Синтаксическая ошибка: идентификатор (ошибка C2061)
  9. Решение
  10. Другие решения
  11. C2061 Синтаксическая ошибка (идентификатор)
  12. 2 ответы

C2061: синтаксическая ошибка: идентификатор ‘строка’ — странное поведение

Я пытаюсь изучать C ++, однако, параметр метода, который у меня есть в моем собственном классе, ведет себя неправильно. Когда он использует dataType типа int, он отлично работает без ошибок, но когда я пытаюсь изменить его на «string» dataType, программа вылетает с этой ошибкой.

Ошибка 1 ошибка C2061: синтаксическая ошибка: идентификатор ‘строка’ в файле temp.h ln
8 цв 1

Я использую следующие классы:

РАБОЧИЙ КОД
TesterClass.cpp // Точка входа

Сломанный код
Temp.h

Когда я настраиваю параметр «blah» на строку, как в файле .h, так и в файле .cpp, возникает проблема.

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

Если вы знаете, как решить мою проблему, я хотел бы услышать от вас. Я более чем рад предоставить больше информации.

Решение

C ++ выполняет однопроходную компиляцию, поэтому std :: string необходимо объявить перед тем, как использовать его вообще — в том числе в заголовочном файле.

Я бы посоветовал вам быть более точным в ваших заголовочных файлах при указании таких классов, потому что вы можете легко встретить другую библиотеку, которая определяет свою собственную string и тогда вы столкнетесь с конфликтами имен. Спасти using импортировать операторы для ваших файлов cpp.

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

У πάντα ῥεῖ был письменный ответ, спасибо!

Они сказали использовать std :: string при необходимости, а также #include в заголовочном файле.

Источник

ошибка C2061: синтаксическая ошибка: идентификатор ‘строка’

это, вероятно, проблема с включением, я получаю эти ошибки по всему коду, а не только для строкового идентификатора, например error C2146: syntax error : missing ‘;’ before identifier ‘getName’ и error C2146: syntax error : missing ‘;’ before identifier ‘name’

вот пример класса:

вот мой stdafx.h файл:

задан 14 мая ’12, 19:05

using пространство имен в заголовочном файле — ужасная идея. Любой файл, который включает ваш заголовок, теперь имеет using namespace std; в нем (это плохо). — Ed S.

спасибо, удалил. еще не исправлено — Michael

Прямо не показано, что это проблема в опубликованном вами коде, поскольку то, что вы опубликовали, не показывает, что они используются, но макросы, заканчивающиеся точкой с запятой, почти всегда будут вызывать проблемы. — Michael Burr

@MichaelBurr: Хорошо, если ты уберешь это, тогда string сразу становится неопределенным (используйте std::string вместо). Кроме того, почему ваши #define s заканчиваются точкой с запятой? — Ed S.

@Майкл, потому что stdafx.h для вашего предварительно скомпилированного заголовочного файла. Он включен везде, поэтому вы хотите помещать в него только те вещи, которые необходимы везде и не меняются часто. Если положить все в stdafx.h каждый раз, когда вы изменяете один из своих заголовков, вы должны перекомпилировать весь проект, а не только измененную часть. Общее эмпирическое правило заключается в том, чтобы включать как можно меньше заголовков в заголовки. — AJG85

1 ответы

Итак, я скомпилировал ваш код в том виде, в котором он был опубликован, без ваших пользовательских файлов заголовков, и он работал нормально. Исходя из этого, я собираюсь поспорить, что у вас есть проблема в одном из этих заголовочных файлов:

Это может быть макрос, класс/структура, не оканчивающаяся точкой с запятой, и т. д. Проверьте это.

Напоследок несколько второстепенных вопросов:

Во-первых, using пространство имен в заголовочном файле — ужасная идея. Любой файл, который включает ваш заголовок, теперь имеет using namespace std; в нем (это плохо). Вы, вероятно, не хотите включать так много файлов заголовков в каждый файл, который включает stdafx.h .

Во-вторых, как только вы удалите это, то string сразу становится неопределенным (вместо этого используйте std::string).

Наконец, почему ваш #define s заканчиваются точкой с запятой? В этом нет необходимости.

Источник

C ++: синтаксическая ошибка C2061: неожиданный идентификатор

Что не так с этой строкой кода?

bar foo (вектор ftw);

задан 11 июн ’10, 19:06

5 ответы

попробуйте вместо этого std :: vector. Кроме того, убедитесь, что вы

Возможно, вы забыли включить вектор и / или импорт std::vector в пространство имен.

Убедитесь, что у вас есть:

или просто используйте:

блин, обыграй меня на секунду 😉 — Адриан Григоре

using namespace std; в вашем коде?

определяет std::vector class, поэтому вам нужно включить его где-нибудь в вашем файле.

так как вы используете vector , вам нужно указать компилятору, что вы собираетесь импортировать весь std пространство имен (возможно, это не то, что вы хотите делать) через using namespace std;

В противном случае вектор должен быть определен как std::vector

стараться std::vector or using std;

Сам по себе этот фрагмент кода не имеет определения bar , vector or odp . Что касается того, почему вы не получаете сообщение об определении bar , Я могу только предположить, что вы вырвали это из контекста.

Я предполагаю, что он должен определять foo как функция, что vector называет шаблон и что он должен определять параметр, называемый ftw но в объявлении все, что фактически не определяется, должно быть объявлено заранее, чтобы компилятор знал, что означают все остальные идентификаторы.

Например, если вы определяете новые типы следующим образом, вы получаете фрагмент, который будет скомпилирован:

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками c++ syntax compiler-errors or задайте свой вопрос.

Источник

Синтаксическая ошибка: идентификатор (ошибка C2061)

Я ненавижу публиковать что-то настолько тонкое, но это совершенно не дает мне понять, что я делаю неправильно:
Когда я компилирую, это совсем не нравится Class Simulator. Я получаю ошибку

в каждом экземпляре симулятора я использую внутри заголовочного файла DOCO. Это также делает это для моей структуры Pellet. Код работал совершенно нормально, пока я не начал добавлять функции, которые работают с классом Simulator, в DOCO.h.
Класс Simulator использует структуру DOCO, а структура DOCO использует класс Simulator. Это проблема? Может быть, я использовал мои заголовки неправильно?

Вот ссылка на ошибку, которую я получаю, если она помогает: http://msdn.microsoft.com/en-us/library/yha416c7.aspx

Заголовочные файлы:
Simulator.h

Решение

Как я уже говорил выше, ваша проблема связана с рекурсивным включением.

Вы можете сделать одну из двух вещей:

1) Измените свой класс симулятора так, чтобы вы использовали ссылки на DOCO или указатели на DOCO, и таким образом forward declare DOCO.

2) Измените свой заголовок DOCO, чтобы использовать указатели на Simulator или ссылки на Simulator, а затем просто вперед объявить Simulator ,

Самый простой способ изменить (если эти комментарии в вашем коде остаются) — это изменить DOCO.h :

Внутри DOCO определение структуры, вы можете указать ссылки и указатели на Simulator , а не симулятор объектов.

Я также советую не положил using namespace std; в заголовочном файле. Это обсуждается во многих темах на SO, почему вы не должны иметь эту строку в заголовочном файле.

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

Я уверен, что вы не хотели заранее объявить классы.

Источник

C2061 Синтаксическая ошибка (идентификатор)

Это всего лишь один файл .c в проекте. Вот код:

задан 02 сен ’10, 04:09

Эта ошибка может быть вызвана взаимозависимыми файлами заголовков. — Grault

2 ответы

bool не относится к типу C.

Я подозреваю BOOL где-то определяется.

То же самое касается использования true и false .

Не могу поверить, что я это пропустил, я занимался C ++ прямо перед тем, как начал это, спасибо. — гитара

C99 действительно имеет bool во всей красе. Хорошая ссылка на Windows и ее булевы (и похожие) здесь: blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx — ласково

На самом деле, bool является допустимым типом (ну, фактически, макросом) в стандарте C99, если вы используете последний компилятор. Вам необходимо добавить:

Обратите внимание, что bool не действует в более старых вариантах стандартов C. ANSI, C89, C90 и т. д.

Как подчеркнул JeremyP в комментариях, компилятор Microsoft C по-прежнему не имеет надлежащей поддержки функций C99.

Остается три альтернативы:

  1. Считайте это C ++, а не C; потому что C ++ имеет bool как встраиваемый
  2. Создайте свой собственный bool реализация
  3. Перепишите код, чтобы избежать использования bool

Для варианта 2 что-то вроде этого будет работать, но это уродливый обходной путь:

Он не использует последний компилятор, он использует Microsoft Visual C, который не поддерживает C99. — ДжеремиП

Хорошая точка зрения. Я предполагал, что Microsoft добавила бы его в какой-то момент в последнее десятилетие, но они, кажется (после некоторого чтения) игнорируют C99, вместо этого сосредотачивая свои усилия на C ++ 0x. — Саймон

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками c compiler-errors syntax-error or задайте свой вопрос.

Источник

Rishka

0 / 0 / 0

Регистрация: 16.03.2013

Сообщений: 13

1

21.01.2016, 17:01. Показов 3873. Ответов 3

Метки нет (Все метки)


Выдаёт ошибку error C2061: синтаксическая ошибка: идентификатор «String». В чём причина не знаю. Помогите, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
using namespace std;
 
 
class Factory {
public: int createObez(String^ kind){
        if (kind == "Широконосый") 
             {Shirikonosiy* sh = new Shirikonosiy(); return sh->nomkar;}
             else 
                 if (kind == "Узконосый") 
                 {Uzkonosiy *uz = new Uzkonosiy(); return uz->nomkar;}
                 else 
                     if (kind == "Человекообразный") 
                     {Chelovekoobrazniy* ch = new Chelovekoobrazniy(); return ch->nomkar;}
        }
};

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



skaa

Хочу в Исландию

1041 / 840 / 119

Регистрация: 10.11.2010

Сообщений: 1,630

21.01.2016, 18:44

2

Может быть это поможет: в VS 2008 надо типа так:

C++
1
2
3
4
5
6
7
8
9
    class Factory
    {
        public int createObez(String kind)
        {
            if (kind == "lalala")
                return 1;
            return 0;
        }
    }



1



Администратор

Эксперт .NET

15248 / 12287 / 4904

Регистрация: 17.03.2014

Сообщений: 24,884

Записей в блоге: 1

21.01.2016, 18:59

3

Rishka, String^ это .NET-й тип. Для него нужен using namespace System; и проект с поддержкой CLR. Ты точно пишешь на управляемом C++? Если нет, то тогда используй родные C++ типы. Например, std::string.



1



IGPIGP

Комп_Оратор)

Эксперт по математике/физике

8776 / 4515 / 608

Регистрация: 04.12.2011

Сообщений: 13,468

Записей в блоге: 16

21.01.2016, 20:33

4

Цитата
Сообщение от skaa
Посмотреть сообщение

C++
1
kind == "lalala" ...return 1;...else return 0;

если даже не «lalala» тогда точно ноль.



0



Синтаксическая ошибка: идентификатор «Player». Файл mob.h ст 40
Гуглить пробовал. Ответ так и не нашел

player.h:

#pragma once
#include "Weapon.h"
#include "Mob.h"

class Player
{
public:
	int health, armor, exp, mana;
	int currentHealth, currentArmor, currentMana, toNextLvlExp, balance;
	int missChanceBody, missChanceHead, missChanceLegs;

	Weapon sword;
	Weapon magicStick;

	Player(int _health, int _armor, const Weapon& _sword, const Weapon& _magicStick);
	int takePhysicalDamage(Mob& m);
};

mob.h:

#pragma once
#include <string>
#include "Player.h"

using namespace std;

class Mob
{
public:
	enum mobType {
		PHYSIC,
		MAGIC
	};

	enum attackDir {
		HEAD,
		BODY,
		LEGS
	};

	int health, armor, magicResistance, shockResistance;
	int currentHealth, damage, spreadDamage;
	string name;
	mobType attackType;

	

	/**
	 * Конструктор класса Mob.
	 * Принимает 3 аргумента
	 * _health - здоровье моба
	 * _magicResistance - защита от магического урона
	 * _shockResistance - защита от физического урона
	 * _damage - урон
	 * _spreadDamage - Разброс урона
	 * _name - Имя моба
	 * type - тип атаки моба
	 */
	Mob(int _health, int _magicResistance, int _shockResistance, int _damage, int _spreadDamage, string _name, mobType type);
	int takePhysicalDamage(Player* player, attackDir dir);
	int takeMagicalDamage(Player* player, attackDir dir);
};


Recommended Answers

Not sure if in Visual_Basic works like this, but in Borland C++ Builder worked just fine

void __fastcall TForm1::Button3Click(TObject *Sender)
{
int k;
k=5   ;
Label1->Caption = k;
}

Jump to Post

Mixing C++/CLI and standard C++ can be troublesome. Try sticking to one or the other unless you have good reason not to:

label2->Text = Convert::ToString ( a );

Jump to Post

All 6 Replies

Member Avatar

13 Years Ago

Not sure if in Visual_Basic works like this, but in Borland C++ Builder worked just fine

void __fastcall TForm1::Button3Click(TObject *Sender)
{
int k;
k=5   ;
Label1->Caption = k;
}

Member Avatar

13 Years Ago

Looks like ye’ need to perform a good ol’ int-to-string conversion. Today we’ll be creating an ‘ostringstream’ object derived from the <sstream> library in order to facilitate our int-to-string needs:

#include<sstream>
#include<string>
#include<iostream>

using namespace std;

int main()
{
     ostringstream int_to_str;
     string temp;
     int a = 0;

     cout << "Enter a number fool: ";
     cin >> a;

     int_to_str << a;
     temp = int_to_str.str();

     cout << "String " << temp << " == int " << a;

     return 0;
}

Edited

13 Years Ago
by Clinton Portis because:

you can’t fight the funk.

Member Avatar

13 Years Ago

vidmaa, this doesn’t work with Visual.


Clinton, it does not work in my situation. I am sure it is going to work if I do it as console application. However it does not work with the Forms :(

Edited

13 Years Ago
by hajiakhundov because:

n/a

Member Avatar

13 Years Ago

I looked around a bit, what I found out is that we actually need to convert an int to System::String. Who can help me with that?

Member Avatar


Narue

5,707



Bad Cop



Team Colleague


13 Years Ago

Mixing C++/CLI and standard C++ can be troublesome. Try sticking to one or the other unless you have good reason not to:

label2->Text = Convert::ToString ( a );

Member Avatar

13 Years Ago

Narue, thanks a lot! It worked finally :)


Reply to this topic

Be a part of the DaniWeb community

We’re a friendly, industry-focused community of developers, IT pros, digital marketers,
and technology enthusiasts meeting, networking, learning, and sharing knowledge.

  • Forum
  • Beginners
  • syntax error identifier string.

syntax error identifier string.

Hi,
I’m getting an error C2061: syntax error : identifier ‘string’. Could you help me please?

1
2
3
4
5
6
7
8
class Person
{
public:
	Person(string stName);
	virtual void Print() const;
private:
	string m_stName;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include "Person.h"

Person::Person(string stName)
:m_stName(stName)
{
	//Empty
}
void Person::Print() const
{
	cout << "Name: " << m_stName << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include "Person.h"
#include "Student.h"
#include "Employee.h"

using namespace std;

void main()
{
	Person person("John Smith");
	person.Print();
	cout << endl;
	Student student("Mark Jones", "MIT");
	student.Print();
	cout << endl;
	Employee emloyee("Adam Brown", "Microsoft");
	employee.Print();
	cout << endl;
	Person* pPerson = &person;
	pPerson->Print();		//calls print in person
	cout << endl;
	pPerson = &student;
	pPerson->Print();		//calls print in student
	cout << endl;
	pPerson = &emloyee;
	pPerson->Print();		//calls print in employee
}

thanks in advance for your help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include "Person.h"

namespace std;

Person::Person(string stName)
:m_stName(stName)
{
	//Empty
}
void Person::Print() const
{
	cout << "Name: " << m_stName << endl;
}

I noticed I forgot namespace std; but it still has the error

Last edited on

I get about 500 errors from this project. Oh well maybe it was setup wrong. and its actually 81 errors

Last edited on

Topic archived. No new replies allowed.

Понравилась статья? Поделить с друзьями:
  • Error c2059 syntax error declspec dllexport
  • Error c2057 требуется константное выражение
  • Error c2039 string is not a member of std
  • Error c2036 void unknown size
  • Error c2027 использование неопределенного типа