求解 Clang 编译下无法使用 getline 的问题

2017-01-03 09:41:04 +08:00
 polebug

使用语句 getline(cin,s); 报错 Error - no matching function for call to 'getline'

相关环境 MacOS sublime2 clang 编译

万脸懵逼... 找不到相关解决方法 QAQ 求解

2105 次点击
所在节点    C
13 条回复
forcecharlie
2017-01-03 10:17:29 +08:00
你是引入了
#include <sdtio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);

还是
#include <string>
istream& getline (istream& is, string& str, char delim);

http://www.cplusplus.com/reference/string/string/getline/
svenFeng
2017-01-03 10:32:48 +08:00
如果 C++的话。。。不要动不动就 using namespace std;
直接写 std::getline 、 std::cin 来调用,
如果用的多的比如 std:: cout,可以这样来: using std::cout;
q397064399
2017-01-03 10:37:54 +08:00
楼上+1 C++历史遗留问题,包管理机制以及命名空间有问题,最好还是不要 using namespace std
q397064399
2017-01-03 10:39:00 +08:00
使用系统函数或者库函数最好还是 使用全限定名称
polebug
2017-01-03 11:08:01 +08:00
@forcecharlie #include <string>
polebug
2017-01-03 11:10:33 +08:00
@q397064399
@svenFeng
不使用 using namespace std;果然解决了问题
顺便想请问一下,以前在 win 下用 vs,dev-c++这类 ide 并没有遇到这类问题是为什么
q397064399
2017-01-03 12:54:34 +08:00
@polebug 因为他们对新手友好,我只能这么解释,我用 vs 的时候 也没出国这档子事情,后来是上了 stackoverflow
老司机教育我,要用全限定名 或者 using xx 之类的,我就学会了

另外我 c/c++ 都是 linux 环境下搞的,不在 windows 下面搞,
svenFeng
2017-01-03 13:08:48 +08:00
#include <string>
#include <iostream>

using namespace std;

int main(){
string s;
getline(cin, s);
return 0;
}


如果你的代码是这样的,事实上我用 Linux 下的 clang++3.8/3.9 和 g++-6 编译,都不会报错,会调用这个函数: istream& getline (istream& is, string& str, char delim);
,微软家的编译器应该也是这样的,所以你可以把代码贴上来看看。
svenFeng
2017-01-03 13:09:06 +08:00
yangff
2017-01-03 13:10:38 +08:00
不合理啊,怕别是编译器 /库实现的 bug
svenFeng
2017-01-03 13:11:10 +08:00
istream& getline (istream& is, string& str);看错- -,应该是调用这个。
@polebug
yangff
2017-01-03 13:15:00 +08:00
#include <cstdio>

namespace Fuck {
void shit(int x){ printf("a"); }
}

void shit(double y) {printf("b");}

using namespace Fuck;

int main(){
shit(1); // Fuck::shit(int);
shit(1.0); // ::shit(double);
}

LZ 你执行这个试试?
yangff
2017-01-03 13:16:44 +08:00
至于限定不限定的……
namespace A{
class A
//...

}
才坑……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/331820

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX