小编The*_*ner的帖子

有没有理由使用这个 - >

我用C++编程多年,但我对一件事情仍有疑问.在其他人代码的许多地方,我看到类似的东西:

void Classx::memberfunction()
{
    this->doSomething();
}
Run Code Online (Sandbox Code Playgroud)

如果我需要导入/使用该代码,我只需删除this-> part,我从未见过任何破坏或有一些副作用.

void Classx::memberfunction()
{
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

那么,你知道使用这种结构的任何理由吗?

编辑:请注意我在这里谈论成员函数,而不是变量.我知道当你想要区分成员变量和函数参数时,可以使用它.

编辑:明显重复: 有没有理由不使用"这个"("自我","我",......)?

c++

16
推荐指数
4
解决办法
5786
查看次数

跟踪和记录 C++ 程序的逐行执行

我正在开发一个开源有限元软件,它是用 C++ (Visual Studio) 编写的。提供的文档和示例仅有助于了解为了特定目的而调用哪些方法,但无法帮助用户了解这些方法到底在做什么。对于某些方法,除了 C++ 代码之外,没有其他可用的参考(例如书籍、研究论文等)

因此,为了推导出这个概念,我尝试使用断点和查看调用堆栈(Visual Studio 中提供的选项)来跟踪每一行执行,这可能适合跟踪小程序,但我的程序由许多具有多个继承的类组成和多态函数。为了理解程序执行流程,我想在日志文件中打印程序执行的每一行。

在研究过程中,我发现了一些有用的信息(此处),采用 python 语言。这正是我所需要的。为了方便读者,我复制了下面视频中提到的代码

import sys

def remove_html_markup(s):
    tag     =   False
    quote   =   False
    out     =   " "

    for c in s:
        if c == 'c' and not quote:
            tag = True
        elif c== '>' and not quote:
            tage = False
        elif c == '"' or c == "'" and tag:
            quote = not quote
        elif not tag:
            out = out + c
    return out

def traceit(frame, event, arg): …
Run Code Online (Sandbox Code Playgroud)

c++ python logging trace visual-studio

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

从MATLAB调用C ++可执行文件时如何绕过错误对话框?

我需要从forMATLAB中的循环运行C ++可执行文件。我为此编写了以下代码,

EqNumbers = [17 18 20 21 22 23];

for i = 1:length(EqNumbers)

    EqNumber = EqNumbers(i);
    WriteRunE_File(EqNumber);

    filename=['RunE_1.tcl'];
    system(['OpenSees.exe<',filename]);

end
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,它运行良好,但是有时会出现调试错误(如下图所示)。它提示我采取措施,如果我按“中止”按钮,则程序将继续进行下一次迭代。我只想使此过程自动化,对我来说,每次都无法手动按“中止”按钮,因为该程序中有1000多次迭代。

在此处输入图片说明

我尝试使用try-catch end以下方法,但没有达到目的。

EqNumbers = [17 18 20 21 22 23];


for i = 1:length(EqNumbers)
    try
        % Code to be executed goes here.

        EqNumber = EqNumbers(i);
        WriteRunE_File(EqNumber);

        filename=['RunE_1.tcl'];
        system(['OpenSees.exe<',filename]);
    catch
        disp('An error occurred in Equke');
        disp('Execution will continue.');
    end

end
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来绕过错误消息或自动按“中止”按钮。这样程序将自动移至下一个迭代。

注意:

我无权访问C ++源代码(我所拥有的都是可执行文件),因此无法更新的值citaR。这就是为什么我要在MATLAB中寻找解决方法。

c++ matlab dialog ui-automation swallowed-exceptions

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