当我运行以下脚本时:
#!/bin/bash
cat /dev/urandom | tr -dc '[:graph:]' | head -c 64
Run Code Online (Sandbox Code Playgroud)
(它应该打印 64 个随机字符,它确实如此)
我得到以下输出:
Kn5Thh'H]F2NMG3^2(T*GdH]C+|Y0uj%C?LGFo=9d9o%vcP9k~6u~Q&exr`RuQv{./myScript: line 2: 21677 Broken Pipe cat /dev/urandom
21678 | tr -dc '[:graph:]'
21679 Done | head -c 64
Run Code Online (Sandbox Code Playgroud)
为什么我收到Broken Pipe错误?是不是因为cat没有完成打印但head已经完成,所以它发送了一个SIGPIPE?
我如何避免这种情况?
我实际上是在C++中实现一个双向链表.
这是一个MWE的种类:
namespace mynamespace {
template <typename T>
class List {
public:
List();
void prepend(T);
void append(T);
void remove(T);
private:
struct Node {
T value_;
Node * prev_;
Node * next_;
};
private:
Node * find(T); // <-- THIS IS MY PROBLEM
private:
Node * head_;
Node * tail_;
};
}
Run Code Online (Sandbox Code Playgroud)
我想创建该函数的原因是因为我认为如果我能用这样的函数遍历列表,直到我找到一个给定的元素(我需要对remove()函数执行相同的操作),它会很方便.
但是如何在定义之外定义该函数class?
由于Node是List该类的私有成员,因此无效:
template <typename T>
Node * List<T>::find(T val)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
我想定义函数里面的class定义会的工作,因为Node有道理那里...那是要正确的方法是什么?即便如此,我想必须有一种方法来定义函数我正在尝试的方式......