gpt4 book ai didi

c++ - 此上下文标签中的错误可能会标记错误的位置

转载 作者:行者123 更新时间:2023-11-28 02:39:02 25 4
gpt4 key购买 nike

Win7 64 位

cygwin g++ 4.8.3 (-std=gnu+11)

我的代码有点问题。

class InputClass {
private:
vector<string>& str;
istream in; // no code, no error
public:
InputClass(vector<string> str) : str(str) { }
}; // class InputClass

为什么“istream in;”产生一个错误,为什么“str(str)”被标记为错误。当“istream in;”已删除,没有错误。

完整的错误信息等:

g++ -Wall  -Wunused-variable -std=gnu++11   -c -g -MMD -MP -MF "build/Debug/Cygwin64-Windows/main.o.d" -o build/Debug/Cygwin64-Windows/main.o main.cpp
In file included from /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/iostream:40:0,
from main.cpp:9:
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/istream: In constructor 'InputClass::InputClass(std::vector<std::basic_string<char> >)':
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/c++/istream:606:7: error: 'std::basic_istream<_CharT, _Traits>::basic_istream() [with _CharT = char; _Traits = std::char_traits<char>]' is protected
basic_istream()
^
main.cpp:44:44: error: within this context
InputClass(vector<string> str) : str(str) { }
^

最佳答案

错误是 istream 不是默认可构造的,但您正在尝试默认构造它。存在一个 protected 默认构造函数 - 可能用于其他一些类 - 但您不允许使用它。您唯一可以使用的是:

explicit istream(streambuf* );

但此构造函数还有另一个问题:您正在将 str 构造为对 InputClass 接受的临时 str 的引用。因此,一旦构造函数完成,您就会留下一个悬垂的引用。您需要通过引用而不是值来接受源 vector

关于c++ - 此上下文标签中的错误可能会标记错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com