我正在尝试CS50类的示例代码,当我运行以下代码时,我收到有关字符串的错误消息(字符串':不明确的符号)。我正在使用Visual Studio。 请帮忙
#include <iostream>
#include "cs50.h"
#include <stdio.h>
using namespace std;
void PrintName(string name);
int main(void)
{
printf("Your Name:");
string s = GetString();
PrintName(s);
cin.get();
}
void PrintName(string name)
{
printf("hello, %s\n", name);
}
答案 0 :(得分:5)
我不知道你为什么要使用#include "cs50.h"
实际上 1 ,但我认真地建议保持以下几点:
省略using namespace std;
而不是void PrintName(const std::string& name);
(const
和参考&
,因为您不会更改传递的std::string
参数,只打印它。)
如果您真的想使用printf()
而非std::cout
来表示c ++,请按以下方式打印std::string
个实例:
void PrintName(const std::string& name) {
printf("hello, %s\n", name.c_str());
}
void PrintName(std::ostream& os, const std::string& name) {
os << "hello" << name << std::endl;
}
GetString();
实际上做了什么,但我怀疑签名和实现应该是:std::string GetString(std::istream& is) {
std::string result;
std::getline(is,result);
return result;
}
并致电
int main(void) {
std::cout << "Your Name: ";
std::string s = GetString(std::cin);
PrintName(std::cout,s);
std::cin.get();
}
#include <string>
std::string
醇>
1)到目前为止,我可以看到该头文件的前几行("cs50.h")只构成typedef
的{{1}},可能会失败{} strong>使用任何预期的string
操作:
std::string
这被认为是 非常糟糕的设计 ,我建议只将它放入垃圾箱,它属于垃圾箱。
无论如何,你可以克服它,如果你真的认为需要这样的,只需省略/*
* Our own data type for string variables.
*/
typedef char *string;
语句以避免任何含糊不清。