**字符串':模棱两可的符号**

时间:2014-12-09 20:56:00

标签: c++ string visual-studio-2010

我正在尝试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);
}

1 个答案:

答案 0 :(得分:5)

我不知道你为什么要使用#include "cs50.h"实际上 1 ,但我认真地建议保持以下几点:

  1. 省略using namespace std;而不是void PrintName(const std::string& name);const和参考&,因为您不会更改传递的std::string参数,只打印它。)

  2. 如果您真的想使用printf()而非std::cout来表示c ++,请按以下方式打印std::string个实例:


  3. void PrintName(const std::string& name) {
        printf("hello, %s\n", name.c_str());
    }
    

    1. 在c ++中打印字符串的常用方法是

    2. void PrintName(std::ostream& os, const std::string& name) {
          os << "hello" << name << std::endl;
      }
      
      1. 您没有显示GetString();实际上做了什么,但我怀疑签名和实现应该是:

      2. 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();
        }
        

        1. 如果您的代码涉及#include <string>
        2. ,请不要忘记std::string

          请见FULLY WORKING SAMPLE


          1)到目前为止,我可以看到该头文件的前几行("cs50.h")只构成typedef的{​​{1}},可能会失败使用任何预期的string操作:

          std::string

          这被认为是 非常糟糕的设计 ,我建议只将它放入垃圾箱,它属于垃圾箱。
          无论如何,你可以克服它,如果你真的认为需要这样的,只需省略/* * Our own data type for string variables. */ typedef char *string; 语句以避免任何含糊不清。