2014-02-08 3 views
-2
#include <iostream> 
#include <string> 
using namespace std; 

std::string dispCard(int card) 
{ 
    string textCard = "help"; 
    //cout << textCard; 

    system("pause"); 
    return textCard; 
} 

int main() 
{ 
    // Using this area to test functions for now 
    cout << dispCard(14); 

    return 0; 
} 

Разоблачение строки cout действительно отображает значение. Но я не могу вернуть значение в строке.Как вернуть строковое значение из функции в C++

Честно говоря, я понятия не имею, почему это не работает. Я изначально просто хотел использовать «char», но по какой-то причине это не работает.

Visual Studio не нравится:

char test; 
test = "help"; 

Он подчеркнул "=".

На данный момент я просто хочу вернуть строковое значение из функции. Есть еще что мне нужно, но это главная проблема прямо сейчас.

+0

1. Вам нужна 'const char * test =" help', если вам нужна строка c-стиля 2. Я думаю, вы можете просто выполнить 'return std :: string (" help ")', если вы хотите верните строку. – dkrikun

+2

Что значит, что она не возвращает строку? И почему у вас есть 'system (" pause ")' перед возвратом? – juanchopanza

+0

Просьба проверить/запустить вашу программу в консоли/терминале и избавиться от этого 'system (" pause ");' –

ответ

1

Разоблачение строки cout фактически отображает строку. Но не возвращать строку.

Ваша программа both prints and returns the string, напечатав ее снова в main. Единственными проблемами, которые я вижу с вашей программой, являются:

  1. Вы используете system("pause") без каких-либо причин.
  2. Вы не согласны с использованием префикса std:: или импортом пространства имен. В этой связи я настоятельно рекомендую префикс std::.
  3. Вы не используете аргумент функции.

Первоначально я просто хотел использовать «символ», но это не работает по какой-то причине.

Хорошо, , как следует из названия, может хранить только 1 символ. В:

char test = "help"; 

вы пытаетесь присвоить 5 символов (4 + \0) к объектам кто есть размер может хранить только 1. Это причина, почему компилятор не жаловался.

+0

1. Вау, я даже не заметил этого ... Спасибо, теперь он работает нормально. 2. Что именно вы имеете в виду? Я немного смущен этим. Я хотел бы использовать «использование пространства имен», но я читал где-то еще, что даже если он есть, вам нужно делать строки std :: on. 3. Это звучит как действительно большая ошибка ... Но он отлично работает. Почему это? – TechnoSam

1

Я думаю, вам нужно передать int вашей функции и вернуть ее в строковой форме. Для того, чтобы сделать это преобразование вам нужно что-то вроде этого:

std::ostringstream stm; 
stm << yourIntValue; 
std::string s(stm.str()); 

или это:

char bf[100]; 
sprintf(bf, "%d", yourIntValue); 
std::string s(bf); 

Если поместить этот фрагмент кода в функцию, то вы можете также принять параметр целого типа, преобразовать его в станд: : string и возвращает std :: string, как показали другие.

0

Что нужно сделать, так это объявить возвращаемый тип функции как std::string, а затем вернуть либо строковый объект, что можно неявно преобразовать в строковый объект, либо что-то, что явно создает строковый объект.

Пример:

std::string foo(){ 
    return "idkfa"; //return C-style string -> implicitly convertible to string 
    return {"idkfa"}; // direct initialization of returning std::string 
    return std::string("idkfa"); //return explicitly constructed std::string object 
} 

Также отметим, что строки С-типа имеют тип char* (строки С-типа в основном массив chars, с последним элементом является \0, то есть 0).

0

Ваш код works perfectly fine, хотя system("pause") является полностью избыточным и бессмысленным и его следует удалить. На самом деле это может ввести вас в замешательство.

Смежные вопросы