Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для VoltDeMar
18 / 18 / 4
Регистрация: 05.06.2012
Сообщений: 1,020

Различные методы подключения string

14.04.2015, 13:44. Показов 4039. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Хочу понять особенности строк в C++.
Прочел несколько статей, однако на практике появляются не понятные мне вещи.
Верно ли:
в C++ строки задаются массивом символов char?
<string> - специальный класс для операций над строками?
<string> - можно подключить к любому приложению на С++ ??


В чем разница между System::String , <string> и namespace std ??

Вопрос касательно реального примера:
Получаю такую ошибку error C2871: 'std' : a namespace with this name does not exist
вот в таком коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
 
namespace Заполнитель {
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Diagnostics ;
    using namespace System::Threading;      
    using namespace std;
почему?

Если же убрать строку
C++
1
using namespace std;
, добавить #include<string> и попытаться выполнить такое преобразование:
C++
1
string str(str_array[cell]);
, то ошибка муттирует в 'string' : undeclared identifier. почему?


Углубляясь в поиски информации об использовании строк я нашел информацию о том что существуют:
ссылочный тип (char^) , тип значения (char) и тип нативного указателя (char*).

Почему в приложении WindowsForms появляется такая ошибка:
System::String' : cannot use this type here without a top-level '^'
при таком объявлении:
C++
1
String enumChars = "0123456789ABCDEF";
и почему объявление работает при создании переменной ссылочного типа ??
C++
1
String^ enumChars = "0123456789ABCDEF";


Почему объявить массив строк удается таким образом:
C++
1
2
3
char* str_array [18];
str_array[0] = "Arial";
....
и не удается таким:
C++
1
2
3
char str_array [18];
str_array[0] = "Arial";
....
???

Почему конвертировать такую строку не удается ?
C++
1
 MessageBox::Show(System::String::ToString(str_array[cell]));
Каковы основные правила при создании и использовании строковых переменных (когда нужно использовать ^, когда*, а когда просто тип)?

Попутный вопрос, такое объявления массива объектов я взял из примера в интернете:
C++
1
array<Object^>^myObjArray =...
что из себя представляет этот объект? это переменная ссылочного типа указывающая на экземпляр класса array содержащий переменные ссылочного типа? Почему не удается создать их типом значений ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2015, 13:44
Ответы с готовыми решениями:

Различные варианты подключения к Sybase
Доброго времени суток! Передо мной стоит вопрос: как я могу подключится к Sybase базе (стандартная процедура подключения известна:...

Написать программу, в которой реализуются различные методы сортировки массивов
Здравствуйте! Да, тема сортировка массивов, но не всё так просто. Получил такое задание: Написать программу, в которой реализуются...

Создать универсальный класс Search, содержащий различные методы поиска в массиве
Вроде бы задание не сложное но что то не могу понять что надо сделать. И как это вобще реализовать сравнение объектов произвольных...

9
Заблокирован
14.04.2015, 13:52
Цитата Сообщение от VoltDeMar Посмотреть сообщение
в C++ строки задаются массивом символов char?
<string> - специальный класс для операций над строками?
<string> - можно подключить к любому приложению на С++ ??
да
да
да
Цитата Сообщение от VoltDeMar Посмотреть сообщение
В чем разница между System::String , <string> и namespace std ??
Функционально? Ну это же совсем разные классы, и что главное - один класс шарповый, другой С++.
Открой https://msdn.microsoft.com/ru-... .110).aspx и почитай про шарповый стринг,
потом открой http://www.cplusplus.com/reference/string/string/ и почитай про С++ стринг.
В общем то С# на С++ мало чем похож, он больше похож на убогую Java.
В С++ нет никаких гарбедж коллекторов, везде указатели и динамическая память, да и ваще полный хардкор

Цитата Сообщение от VoltDeMar Посмотреть сообщение
Вопрос касательно реального примера:
Получаю такую ошибку error C2871: 'std' : a namespace with this name does not exist
А ты где это пишешь? Небойсь создал шарповый проект в VisualStudio И пытаешься там STL string прикрутить
Не выйдет. Создавай проект С++.

Можно конечно миксовать С++ и C# с помощью CLI, но это на мой взгляд анахронизм.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
14.04.2015, 13:59
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Ну это же совсем разные классы, и что главное - один класс шарповый, другой С++.
System::String^ это не шарповый класс,а C++/CLI.
Конвертация строк: System::String в массив char/wchar_t, std::string и обратно
Основные отличия C# от C++ CLI

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
System::String^ это не шарповый класс,а C++/CLI.
Хотя,наверное,даже не так.Правильнее будет сказать класс .Net.
0
Заблокирован
14.04.2015, 14:02
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Почему объявить массив строк удается таким образом:
char* str_array [18];
str_array[0] = "Arial";
....
Ну... тут надо С++ знать
Ты тут делаешь не то что предполагаешь.
Здесь ты объявляешь статический массив из 18- указатель типа char.
Нулевому айтиму массива ты присваиваешь значение адреса вновь созданной строки справа от знака равно = "Arial", то есть у тебя создастся массив char[5] tmp = "Arial и его адрес присовится нулевому элементу твоего первоначального массива.

Цитата Сообщение от VoltDeMar Посмотреть сообщение
и не удается таким:

char str_array [18];
str_array[0] = "Arial";
....
тут у тебя статический массив из 18-и элементов типа char, то есть из 18-и символов по 1-му байту.

Ты пытаешь в нулевой элемент массива, то есть в однобайтовый элемент char, загнать неявно созданную справа от знака равно строку (массив) "Arial" из 5-и байт, ясен пень он туда не поместится

Добавлено через 1 минуту
Цитата Сообщение от S_el Посмотреть сообщение
Правильнее будет сказать класс .Net.
вот вот, то есть шарповый.
Создавай проект С++.
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
14.04.2015, 14:09
Цитата Сообщение от VoltDeMar Посмотреть сообщение
то ошибка муттирует в 'string' : undeclared identifier. почему?
Так как не указано пространство имен.Пишите std::string.

Цитата Сообщение от VoltDeMar Посмотреть сообщение
и почему объявление работает при создании переменной ссылочного типа ??
В C++/CLI есть ссылочные классы и классы значений.Объекты первых можно создать только со значком ^.

Цитата Сообщение от VoltDeMar Посмотреть сообщение
и не удается таким:
char это символ,а не строка.

Добавлено через 4 минуты
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Ну... тут надо С++ знать
Скорее C,в C++ не зря std::string придумали

Цитата Сообщение от VoodooPuppet Посмотреть сообщение
вот вот, то есть шарповый.
Создавай проект С++.
Нет.Шарп и .Net не одно и тоже.Можно использовать .Net совершенно не зная C#. Просто так получилось,что из всех языков поддерживаемых платформой .Net С# самый удобный,а поэтому получивший наибольшую поддержку и распространение.А вот C++/CLI такой поддержки не получил и загнулся.Однако сейчас,многих студентов заставляют использовать C++/CLI так как там и C++(который преподавали годами) и формочки.
0
Заблокирован
14.04.2015, 14:13
Цитата Сообщение от S_el Посмотреть сообщение
так как там и C++(который преподавали годами) и формочки.
Преподаватели не ведают, что творят.
Нормальные люди для этих целей используют Qt
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
14.04.2015, 14:15
Цитата Сообщение от S_el Посмотреть сообщение
C++/CLI такой поддержки не получил и загнулся
Это почему? Он же поддерживается в VS и справка MSDN на него есть.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
14.04.2015, 14:33
Цитата Сообщение от VoodooPuppet Посмотреть сообщение
Преподаватели не ведают, что творят.
Нормальные люди для этих целей используют Qt
К сожалению да.Но Qt не панацея,для простых GUI winform проще и ничего,кроме VS скачивать не надо

Добавлено через 17 минут
Цитата Сообщение от nmcf Посмотреть сообщение
Это почему? Он же поддерживается в VS и справка MSDN на него есть.
Да,шаблон в VS и справка по самым основным классам на MSDN есть.Но сам язык не развивается уже достаточно давно.
0
 Аватар для VoltDeMar
18 / 18 / 4
Регистрация: 05.06.2012
Сообщений: 1,020
14.04.2015, 15:19  [ТС]
При вот таком коде :
C++
1
2
3
4
5
6
using namespace std;
 
....
std::string s(str_array[cell]);
MessageBox::Show(System::String::ToString(s));
...
возникает ошибка error C2665: 'System::String::ToString' : none of the 3 overloads could convert all the argument types
при попытке отдать эту строку MessageBox-у без преобразования ошибка:
error C2665: 'System::Windows::Forms::MessageBox::Sho w' : none of the 21 overloads could convert all the argument types

Чем же является моя строка s? Существует разница между строками реализованными этими тремя классами(System::String , <string> и namespace std )?


Главный вопрос :
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Каковы основные правила при создании и использовании строковых переменных (когда нужно использовать ^, когда*, а когда просто тип)?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
14.04.2015, 15:32
Цитата Сообщение от VoltDeMar Посмотреть сообщение
error C2665: 'System::Windows::Forms::MessageBox::Sho w' : none of the 21 overloads could convert all the argument types
Я уже давал ссылку,где показан способ правильного преобразования.

Цитата Сообщение от VoltDeMar Посмотреть сообщение
Существует разница между строками реализованными этими тремя классами(System::String , <string> и namespace std )?
Да.Например namespace std это вообще не строка.

Цитата Сообщение от VoltDeMar Посмотреть сообщение
Каковы основные правила при создании и использовании строковых переменных (когда нужно использовать ^, когда*, а когда просто тип)?
^ вседа когда System::String^ иначе будет ошибка
просто тип когда std::string.
* когда нужен указатель на массив char.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2015, 15:32
Помогаю со студенческими работами здесь

Методы подключения к базам данных
Какими методами осуществляется подключения к базам данных в MS Access. То есть как MS Access подключается к своей базе? Перечитайте...

Разработать приложение, в котором можно выбирать различные методы сортировки для упорядочивания элементов массива
Помогите пожалуйста с приложением. unit Unit7; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Как перевести string в тип Calendar и сравнить различные даты клендаря
Здравствуйте! Возникла проблема, в переменной типа string содержится дата. Как эту переменную перевести в Calendar и сравнить различные...

Класс string - ошибка подключения
Народ, помогите советом, плиз! Пишу лабу на Borland c++ 3.1, в ней надо использовать стандартный класс string, но когда я его подключаю,...

Методы Parse (String)
Всем доброго времени суток! Есть тема: Лабиринт (уровень, клетка, двери / стенка, артефакт) Согласно теме: - создать 9 форм (главная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru