小编Joh*_*0te的帖子

从PHP中的其他成员函数调用成员函数?

我对这段代码中显示的情况感到有点困惑......

class DirEnt
{
    public function PopulateDirectory($path)
    {
        /*... code ...*/

        while ($file = readdir($folder))
        {
            is_dir($file) ? $dtype = DType::Folder : $dtype = Dtype::File;                       
            $this->push_back(new SomeClass($file, $dtype));
        }

        /*... code ...*/
    }

    //Element inserter.
    public function push_back($element)
    {
        //Insert the element.
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要使用$this->push_back(new SomeClass($file, $dtype))self::push_back(new SomeClass($file, $dtype))调用成员函数push_back?我似乎无法push_back(new SomeClass($file, $dtype))像我期望的那样访问它.我读过什么时候使用自我超过$ this?但它没有回答为什么我需要其中一个(或者如果我一直这样做,也许我搞砸了别的东西).

当成员是非静态成员并且在同一个类中时,为什么需要此规范?不应该从同一个类中的其他成员函数中看到并知道所有成员函数吗?

PS:它可以很好地工作$this->,self::但是当电话中没有这些功能时,这些功能都是未知的push_back.

php methods

9
推荐指数
2
解决办法
6006
查看次数

尝试捕获不按预期工作

我遇到了一些我继承的代码的情况......老实说,我相信代码写得正确,但这个错误似乎仍然存在.

我会很快注意到代码是从linux到LynxOS的交叉编译,我不确定这是否与错误有关.

基本上,在一个特定情况下:

try {
    std::vector<ClassA> x = SomeGeneratingFunction();

    //We get to here fine.  X may be empty/unpopulated though.
    if (x.size() < 1)
    {
        throw(MyException("It crashed."));
    }
}
catch (MyException e)
{
    //Handle it.
}
catch (...)
{
    //Handle it.
}
Run Code Online (Sandbox Code Playgroud)

我们抛弃给定的向量是未填充的,但由于某种原因,抛出绕过catch子句 - 两者都是.它似乎只发生在这里 - 虽然我们通常不会形成一个if语句范围,但这应该是完全不相关的,因为它仍然在try范围内.

PS:下面的代码实际上是一个函数的内容,并且在调用函数时会出现异常,即使它们都应该由catch块处理.

任何想法如何可能?是的,这不是真正的代码/异常类,但异常类是你重写std :: exception的谷歌的简单例子,SomeGeneratingFunction()确实返回一个好的向量,即使它是空的.我不能提供真正的代码,但这是非常接近的,除非我可能已经把它写成了我的头脑.

提前感谢任何想法!

-w00te

c++ exception

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

C/C++程序可以通过读取数组末尾(UNIX)来解决错误吗?

我知道你可以读过数组的结尾 - 我现在想知道你是否可以通过执行读操作来解决错误.

int someints[100];
std::cerr << someints[100] << std::endl; //This is 1 past the end of the array.
Run Code Online (Sandbox Code Playgroud)

第二行真的可能导致段错误还是仅仅打印乱码?另外,如果我更改了那个内存,是否会导致该特定行上出现seg-fault ,或者只有当其他东西试图使用该意外更改的内存时才会发生故障?

c c++ unix

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

UNIX僵尸和守护进程

我知道当一个进程没有很好地清理(它的资源没有被回收/收获)时就会创建一个僵尸.在调用fork()创建一个新进程后,父进程应始终在该进程上调用waitpid进行清理.

我还了解到,守护进程是通过分叉一个本身由fork创建的子进程创建的,然后让孩子死掉.显然,UNIX中的init进程(pid#1)将在您执行此操作后保留该进程.

我想知道的是 - 因为据我所知,当父母去世,它会自动清理孩子 - 那么,如何僵尸在第一时间拿到的地方产生的?

其次,守护进程的父进程会消失,为什么守护进程不被视为僵尸?

unix daemon zombie-process

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

将MAC地址std :: string转换为uint64_t

我有一个十六进制MAC地址保存在std :: string中.将该MAC地址转换为uint64_t中保存的整数类型的最佳方法是什么?

我知道stringstream,sprintf,atoi等.我实际上用前两个编写了很少的转换函数,但它们似乎比我想要的更加草率.

所以,有人能告诉我一个好的,干净的转换方式

std::string mac = "00:00:12:24:36:4f";
Run Code Online (Sandbox Code Playgroud)

进入uint64_t?

PS:我没有可用的boost/TR1设施,并且无法在实际使用代码的地方安装它们(这也是为什么我没有复制粘贴我的尝试之一,抱歉!).所以请保留直接C/C++调用的解决方案.如果您有一个有趣的UNIX系统调用解决方案,我也会感兴趣!

c++ unix

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

在UNIX系统上调用sleep(0)有什么影响?

我看到人们在我使用的大量多线程,多进程应用程序系统的某些部分执行此操作.它似乎围绕调试行完成:

std::cerr << "DEBUG: Reaching: " << __FUNCTION__ << " @ " << __LINE__ << std::endl;
sleep(0);
Run Code Online (Sandbox Code Playgroud)

如果我宏睡了(​​0); (即将其更改为""),系统的调试输出似乎有不同的顺序(不太可预测),所以我认为它使得线路更快出来 - 但我认为std :: cerr是无缓冲的,并且std: :无论如何,endl调用std :: flush(),为什么会这样呢?

c++ unix

8
推荐指数
2
解决办法
3570
查看次数

在模板头文件的末尾包含.cpp

我正在阅读一本较旧的数据结构书,它说当你进行模板类编程时,你应该在.h文件的末尾包含.cpp.

据我所知,您必须在.h文件中为任何模板类成员函数执行完整的函数实现 - 这是由于模板编译器的工作方式.

我所教授的唯一功能可以放在模板类的实现文件中,模板专用功能即:template<> Class<Type>::function_name().

为什么这本书建议在.h结束时包含.cpp?这只是一种将实现分离到不同文件,同时让它们用标题编译的方法吗?如果是这样,你会在哪里放置真正的专业 - 我猜他们不能进入标题所包含的.cpp.

c++

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

Sizeof空类

随着代码:

#include <iostream>

class A {};
class B { char x; };

int main()
{
    std::cerr << sizeof(A) << " " << sizeof(B) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我知道要问一个空课的大小是一个常见的面试问题 - 我知道答案是一个.

我的问题是......在一个空类的"1"字节中保存了什么(我猜它是空的),编译器在内部做了什么来使它sizeof Bsizeof A这种情况相同?

我想完全理解它,而不仅仅是知道答案.

c++

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

由于E_WARNING,我是否需要在PHP中尝试/捕获opendir?

我正在为家庭作业制作一个小文件浏览器 - 我的工作和我需要的一样好,但我现在有点困惑处理PHP中的错误情况,因为我正在尝试重构我的编码.

我习惯了C++/C#try/catch错误处理,PHP似乎有一些变种.令我困惑的是这个:

resource opendir(string $ path [,resource $ context])

成功时返回目录句柄资源,失败时返回FALSE.

如果path不是有效目录或由于权限限制或文件系统错误而无法打开目录,则opendir()将返回FALSE并生成级别为E_WARNING的PHP错误.您可以通过在函数名称的前面加上"@"来抑制opendir()的错误输出.

来自http://php.net/manual/en/function.opendir.php.

我是否需要捕获那里提到的级别E_WARNING生成的PHP错误,还是愚蠢的?我不明白为什么它会返回false并抛出一个错误 - 不应该抛出错误使它无论如何都不能正常返回?

php

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

如何将多维数组分配给临时变量?

我想将一个静态分配的多维数组分配给一个临时变量.请考虑以下示例:

void foo(int b[3][2])
{
    b[1][1] = 1; // no segmentation fault
}

int main()
{
    int a[3][2] = {{1, 2}, {11, 12}, {21, 22}};

    foo(a);

    int** c;
    c = (int**)&a;
    c[1][1] = 1; // segmentation fault on execution

    int* d[3];
    d[0] = (int*)&(a[0]);
    d[1] = (int*)&(a[1]);
    d[2] = (int*)&(a[2]);
    d[1][1] = 1; // no segmentation fault

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的编译器与参数什么bfoo().但我能提出的唯一可行的解​​决方案是d.有没有那么复杂的方式?

c++

7
推荐指数
3
解决办法
1万
查看次数

标签 统计

c++ ×7

unix ×4

php ×2

c ×1

daemon ×1

exception ×1

methods ×1

zombie-process ×1