标准库编译器 来自 #include 的错误 -- 所有库都会导致终端错误
Standard Library Compiler Errors from #include -- All libraries result in errors in terminal
我在非常简单的C++项目中被 g++ 编译器抛出非常奇怪的错误。以下错误:
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ios:39,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ostream:40,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iostream:40,
from findWord.cpp:1:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:47: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd: In copy constructor ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:81: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/streambuf: In copy constructor ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:78: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd: In copy constructor ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iosfwd:81: note: synthesized method ‘std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)’ first required here
findWord.cpp: In function ‘int main(int, char**)’:
findWord.cpp:19: note: synthesized method ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’ first required here
我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
int main(int argc, char* argv[]){
//a char pointer is a c-string
//the array is just an array of char pointers
//argv[0] = pointer to the word to search for
//argv[1] = pointer to fileNames
//includes program name @ 0, so three args
if (argc == 3){
int wordCounter = 0;
ifstream myFile = ifstream(argv[2]);
if (!myFile){
cout << "File '" << argv[2] << "' could not be opened" << endl;
return 1;
}
else {
//counts the number of lines in file
int counter = 0;
//holds the new line in the file
char line[100];
//copies string into buffer that is length of word
const char * word = argv[1];
//holds whether found word
bool found = false;
cout << "Searching for '" << word << "' in the file '" << argv[2] << "'" << endl;
while (!myFile.getline(line, 100).eof()) {
//starts every new new at not having found the word
found = false;
//read in new line, so increases line counter
counter ++;
for (unsigned int i = 0; i <= myFile.gcount() - strlen(argv[1]); i++){
if (line[i] == word[0]){
for (unsigned int j = 0; j < strlen(argv[1]); j++){
if (word[j] != line [i+j]){
break;
}
}//end second for loop
wordCounter++;
found = true;
}//end if (char == word[0]
}//end first for loop
if (found){
cout << counter << ": " << line;
}//end if found word
}//end while
cout << "# occurrences of '" << word << "' = " << wordCounter << endl;
myFile.close();
}//end else
}//end if
return 0;
}//end main
您的
myFile
声明导致调用ifstream
的复制构造函数,但ifstream
不可复制(请参阅定义 #5)。这里的语法非常微妙:
ifstream myFile = ifstream(argv[2]);
这条线实际上构造了两个ifstream
对象(一个在左侧,一个在右侧)。然后将右侧复制到左侧。
将行更改为:
ifstream myFile(argv[2]);
将仅构造一个具有自动存储(例如,基于范围/堆栈)的ifstream
对象。
编译器似乎
不喜欢你构造myFile的方式。
尝试ifstream myFile(argv[2]);
而不是ifstream myFile = ifstream(argv[2]);
为了帮助您下次,请注意确切的错误在此行:
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
它清楚地表明该功能是私有的。不太清楚的是,这是一个用作复制运算符的构造函数(正如 Bret Kuhns 指出的那样)。
相关文章:
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 终端错误MacOS:/Applications/Xcode.app/Content/Developer/Toolchai
- 为什么我的代码在终端中没有输出任何内容.开始新行没有错误
- X3:非终端解析器上的链接器错误(未解析的外部符号"parse_rule")
- 从Mac上的终端编译时C 错误
- 在CLion中使用CMake编译带有参数的C++会引发错误,而在终端中编译则不会
- 未定义的引用...终端错误,在日食中不切除
- 标准库编译器 来自 #include 的错误 -- 所有库都会导致终端错误
- 分段错误(核心转储) - 代码在 VS 中有效,但在 Linux 终端中不起作用
- 在终端中获取分段故障11错误
- SDL与OSX lion上的终端/g++链接错误
- 简单C++程序在 Xcode、代码块和终端中运行错误
- C++:在CodeBlocks上编译和运行的程序可以工作,但从终端它给出错误语句
- 在终端中编译SDL2错误(对如何包含SDL2库感到困惑)
- g++编译器在终端中出现奇怪错误
- Mac:服务器上的终端编译器错误
- 如何检查终端I/O导航时用户是否输入了错误的值
- 如何解决此错误?终端的
- 代码在Visual Studio中可以很好地编译,但在使用g++的Unix终端中就不行了.我在多维向量处得到一个错误.为
- 从带有makefile的终端编译时出现错误