小编joe*_*ian的帖子

在C++中对泛型类重载+运算符

我正在尝试重载林类中的+运算符,林是树的集合,而+运算符应该将两个林合并为一个.我有以下代码作为我的类定义:

template<typename NODETYPE>
class Forest
{


    public:

        friend Forest& operator+<>(Forest&, Forest&);
        friend ostream& operator<<<>(ostream&, const Forest&);
        friend istream& operator>><>(istream&, Forest&);
        Forest();
        Forest( const Forest& otherForest);
        ~Forest();
        void nodes(int&) const;

    private:
        ForestNode<NODETYPE> *root;

        ForestNode<NODETYPE> *getNewNode( const NODETYPE &);
};
Run Code Online (Sandbox Code Playgroud)

以下是我对operator +的实现:

template<typename NODETYPE>
Forest& operator+<>(Forest& f1, Forest& f2)
{
    f3 = new Forest();
    f3.root = *f1.*root;
    f3.root.sibling = *f2.*root;
    *f1.root = 0;
    *f2.root = 0;
    return f3;
}
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到以下错误:

|28|error: expected constructor, destructor, or type conversion before '&' token|

第28行指的是我的运算符+实现的签名.

我认为要纠正它我应该添加到返回类型,给出: …

c++ templates overloading operator-keyword

4
推荐指数
1
解决办法
2966
查看次数

fork()的功能

系统信息:我在2个月大的笔记本电脑上运行64位Ubuntu 10.10.

大家好,我对fork()C中的功能有疑问.从我正在使用的资源(Stevens/Rago,YoLinux和Opengroup)我理解当你分叉一个进程时,父进程和子进程都继续执行从下一个命令.由于fork()返回0到子节点,以及子节点到父节点的进程ID,您可以使用两个if语句来分散它们的行为,一个if(pid == 0)用于子节点,并if(pid > 0)假设您分叉pid = fork().

现在,我发生了最奇怪的事情.在我的main函数的开头,我打印到stdout几个已分配给变量的命令行参数.这是整个程序中的第一个非赋值语句,但是,似乎每次我fork在程序中稍后调用时,都会执行这些print语句.

我的程序的目标是创建一个"进程树",每个进程有两个子进程,深度为3,从而创建初始可执行文件的15个子进程.每个进程在fork之前和之后打印它的父进程ID及其进程ID.

我的代码如下并且被正确评论,命令行参数应该是"ofile 3 2 -p"(我还没有实现-p/-c标志":

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main (int argc, char *argv[])
{
    if(argc != 5)//checks for correct amount of arguments
    {
        return 0;
    }

    FILE * ofile;//file to write to
    pid_t pid = 1;//holds child process id
    int depth = atoi(argv[2]);//depth of the process …
Run Code Online (Sandbox Code Playgroud)

c linux fork process

2
推荐指数
1
解决办法
1303
查看次数

分岔和流程管理

系统信息:我在2个月大的笔记本电脑上运行64位Ubuntu 10.10.

大家好,我对C中的fork()函数有疑问.从我正在使用的资源(Stevens/Rago,YoLinux和Opengroup)我理解当你分叉一个进程时,父进程和子进程从下一个命令继续执行.由于fork()将0返回给子节点,并将子节点的进程id返回给父节点,因此可以使用两个if语句来分散它们的行为,一个if(pid = 0)表示子节点,if(pid> 0),假设你用pid = fork()分叉.

现在,我发生了最奇怪的事情.在我的main函数的开头,我打印到stdout已经分配给变量的几个命令行参数.这是整个程序中的第一个非赋值语句,但有时当我稍后在程序中调用fork时,会执行此print语句.

我的程序的目标是创建一个"进程树",每个进程有两个子进程,深度为3,从而创建初始可执行文件的14个子进程.每个进程在fork之前和之后打印其父进程ID及其进程ID.

我的代码如下并且被正确评论,命令行参数应该是"ofile 3 2 -p"(我还没有实现-p/-c标志):

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main (int argc, char *argv[])
{
    if(argc != 5)//checks for correct amount of arguments
    {
        return 0;
    }

    FILE * ofile;//file to write to
    pid_t pid = 1;//holds child process id
    int depth = atoi(argv[2]);//depth of the process tree
    int arity = atoi(argv[3]);//number of children each process should have

    printf("%d%d", depth, arity);

    ofile = fopen(argv[1], "w+");//opens specified file for …
Run Code Online (Sandbox Code Playgroud)

c linux fork process

1
推荐指数
1
解决办法
3350
查看次数

标签 统计

c ×2

fork ×2

linux ×2

process ×2

c++ ×1

operator-keyword ×1

overloading ×1

templates ×1