2011-01-20 42 views
6

Tôi đang gặp sự cố khi khai báo biến chuỗi. Mã và các lỗi có ở đây: http://pastebin.com/TEQCxpZd Bất kỳ suy nghĩ nào về những gì tôi đang làm sai? Ngoài ra, hãy giữ nền tảng độc lập. Cảm ơn!Tuyên bố biến đổi chuỗi C++

#include <stdio.h> 
#include <string> 
using namespace std; 

int main() 
{ 
    string input; //Declare variable holding a string 

    input = scanf; //Get input and assign it to variable 
    printf(input); //Print text 
    return 0; 
} 


Getting this from GCC: 

main.cpp: In function ‘int main()’: 
main.cpp:53:10: error: invalid conversion from ‘int (*)(const char*, ...)’ to ‘char’ 
main.cpp:53:10: error: initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’ 
main.cpp:54:14: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’ 
+2

Điều gì đã cho bạn ý tưởng 'input = scanf' hợp lệ? – GManNickG

+0

Có thể từ Pascal nơi bạn có thể gọi một hàm không có '()'. – dan04

+0

Thật kỳ lạ, C++ không phải là Pascal. – GManNickG

Trả lời

5

Bạn đang trộn C++ và c I/O. Trong C++ đây là,

#include <string> 
#include <iostream> 

int main(void) 
{ 
    std::string input; 
    std::cin >> input; 
    std::cout << input; 
    return 0; 
} 
+0

Tôi hiện đang gặp lỗi này: http://pastebin.com/GuEVJ3FY – Mike

+1

@Mike: Bạn đã bao gồm tiêu đề iostream chưa? '#include ' Ngoài ra, bạn có lẽ nên sử dụng g ++ để biên dịch các chương trình C++, chứ không phải là gcc. –

+0

Tôi đã bao gồm iostream. Vấn đề là trong terminal tôi phải gõ g ++ main.cpp -o hello_world thay vì gcc. Cảm ơn cody! – Mike

2

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

input = scanf; //Get input and assign it to variable 

Bạn đang cố gắng gán con trỏ chức năng-scanf cho một biến chuỗi. Bạn không thể làm điều đó, đó là lý do tại sao bạn nhận được lỗi đầu tiên. Cú pháp thích hợp sẽ là.

char buffer[BIG_ENOUGH_SIZE]; 
scanf("%*s", sizeof(buffer) - 1, buffer); 
input = buffer; 

Nhưng đó là cách làm theo kiểu C. Cách thành ngữ để đọc đầu vào trong C++ là với std::cin >> input như Nathan đã đề xuất.

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

printf(input); //Print text 

printf mất một const char* như là đối số đầu tiên của nó, không phải là một std::string. Bạn có thể sử dụng .c_str() để chuyển đổi thành chuỗi kiểu C. Nhưng không bao giờ chuyển đầu vào của người dùng làm đối số đầu tiên cho printf; người dùng có thể làm những thứ khó chịu bằng cách đặt % vào chuỗi. Nếu bạn nhấn mạnh vào đầu ra kiểu C, cú pháp chính xác là:

printf("%s", input.c_str()); 

Nhưng thay thế kiểu C++ là std::cout << input;.

+0

Tôi thậm chí không thể biên dịch Hello World đúng cách. Tôi nghĩ có điều gì đó sai với trình biên dịch, cho dù mã có đúng hay không, tôi biết không có gì sai với #include bằng cách sử dụng không gian tên std; int main() { \t cout << "Hello World!" << endl; \t trả về 0; } – Mike

+0

Điều gì có vẻ thú vị hơn ở đây là khi xây dựng theo MSVC, hàm ẩn từ std :: string thành const char * thành công nhưng không được biên dịch với GCC. Tôi tưởng tượng điều này là bởi vì việc thực hiện MSVC std :: string có chứa một nhà điều hành cast cho const char * trong khi việc thực hiện GCC không? –

1

Tôi hiểu câu hỏi là: Làm thế nào để bạn khai báo chuỗi trong C++? Đây là một chương trình ngắn để minh họa:

#include<iostream> 
#include<cstdlib> 
using namespace std; 
int main() 
{ 
    string your_name; 
    cout << "Enter your name: "; 
    cin >> your_name; 
    cout << "Hi, " << your_name << "!\n"; 
    return 0; 
} 

Vì vậy, hãy bao gồm cstdlib khi bắt đầu chương trình của bạn. Trong điều kiện thực tế, điều này có nghĩa là gõ chuỗi thay vì std :: string, cout thay vì std :: cout và vân vân. Biến chuỗi chính nó (trong ví dụ, biến chuỗi là your_name) được khai báo bằng chuỗi.

Hãy nói rằng bạn đã lưu chương trình với tên tập tin, 'str_example.cpp' Để biên dịch chương trình tại cửa sổ dòng lệnh (trong Linux):

g++ -o str_example str_example.cpp 

này tạo ra một đối tượng tập tin thực thi gọi là str_example (không có phần mở rộng tập tin). Và cuối cùng, giả sử bạn đang ở trong cùng thư mục với chương trình, để chạy nó:

./str_example 

Các trang người đàn ông cho g ++ là phong phú, nhưng không bao gồm theo mặc định. Để cài đặt tài liệu g ++ bằng cách sử dụng trình quản lý gói aptitude:

sudo apt-get install gcc-7-doc 

Lưu ý rằng '7' đề cập đến phiên bản 7; phiên bản hiện tại tại thời điểm viết bài. Hy vọng rằng sẽ giúp.