小编zar*_*zar的帖子

我们应该避免变量的复数名称吗?

有时,当一个变量像一个数组或列表这样的对象集合时,它很容易将变量命名为复数.这没关系,还是我们应该总是坚持变量的单数名称?作为一个例子,一系列汽车可称为"汽车"或"汽车"

考虑另一个例子:

    vector< string > students; // it is named as students rather singular student

    students.push_back("Mark");
    students.push_back("Steve");

     // lets say we are using index to retrieve it, it does look 
     // a little clumsy

    string current_student = students[0]; 
Run Code Online (Sandbox Code Playgroud)

或者,我们可以像下面一样将容器对象定义为单数,但它现在看起来像是代表一个对象而不是学生集合?它确实使用索引看起来更好.

    vector< string > student;
Run Code Online (Sandbox Code Playgroud)

我个人喜欢的另一个选择是这样的:

   vector< string > student_list;
Run Code Online (Sandbox Code Playgroud)

我将'_list'(或可能是骆驼符号)附加到集合变量名称(无论其向量或列表或映射如何).这样,对象的名称是单数的,但它将自身标识为对象的集合.

哪种更好的方式或惯例,以及更具可读性?应该绝对避免多个名字吗?

另外想想另一个更简单的例子,比如我们正在进行一项实验,我们以不同的间隔记录一天100次的温度,因此我们:

     float temperatures[100]; // or temperature[100]? or temperature_list[100]?
Run Code Online (Sandbox Code Playgroud)

或者甚至可能是不同的:

    float temperature_data[100]?
Run Code Online (Sandbox Code Playgroud)

c++ stl naming-conventions

8
推荐指数
3
解决办法
3754
查看次数

WinDbg SRV*的文档是错误的吗?

文件说:

如果在符号路径中包含字符串srv*,则调试器使用符号服务器从默认符号存储中获取符号.例如,以下命令告诉调试器使用符号服务器从默认符号存储中获取符号.这些符号不会缓存在本地计算机上.

.sympath srv*

然而,我发现的是符号缓存.

我正在使用WinDbg 10并且默认缓存文件似乎是在创建时C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym当我删除它们并运行可执行文件时,路径设置为srv*符号,这里是下载的.

那么文档错了吗?

c++ windbg

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

类没有在dll中实例化

我已经构建了一个MFC项目(可执行文件)作为dll或更准确我已经添加了导出函数就像一个DLL.我可以加载并执行导出的函数,但问题是当我加载模块时,主应用程序类CMyApp theApp不会被实例化.这意味着我无法使用theApp我真正想要的对象.我甚至修改了下面的函数,所以它匹配标准MFC dll的函数.

BOOL CMyApp::InitInstance()
{
   CWinApp::InitInstance();

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

LoadLibrary()用来加载exe/dll.注意,我不是从dll导出任何c ++类,只是几个标准的C风格函数.这些函数内部想要使用主应用程序对象,但它没有实例化(从不调用它的构造函数).我需要做什么才能正确实例化app类,就像在标准的mfc dll中一样?

**更新**

理想情况下,我想在exe本身中提供导出的函数,我已经完成了,但是当我使用LoadLibrary应用程序theApp类加载它时,不会实例化.我相信这是相同的行为,即使它是一个DLL.我的项目有很多依赖项,并创建一个新的DLL项目,添加所有文件和库太麻烦了.我真的想改变当前项目的项目设置,如果有的话,我可以加载正确实例化的应用程序类,就像常规的MFC dll一样.但问题是我需要改变哪些项目设置?

注意:我将使用实例化主对话框对象#define.基本上dll版本的InitInstance()函数可以像我上面发布的那样简单.

c++ dll mfc visual-studio-2010

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

如何在Mac Yosemite上卸载Qt Creator

我试过这个但是当我这样做时,终端问我密码.我不知道这个密码是什么?我的Mac上没有任何密码,登录时我没有输入任何密码,我无法通过下面的第一步.

sudo QtSDK/SDKMaintenanceTool.app/Contents/MacOS/SDKMaintenanceTool
Run Code Online (Sandbox Code Playgroud)

我在Mac OS Yosemite 10.10上卸载Qt Creator 2.8.1我只是想安装最新的5.3.2版本并摆脱旧版本.我可能会选择一个新文件夹,但我不想这样做,它不允许我安装在当前文件夹上.

macos qt qt-creator osx-yosemite

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

<file>的所需名称无效 - visual studio 2015

这非常疯狂,我只是将现有的.h文件添加到VS2015 C++项目中,但它会抱怨:

c:\ code\usbview\USBdevices.h的所需名称无效

当它有自己的.sln文件时,我能够将此文件添加到项目中.但是,我创建了一个新的空.sln文件,并希望添加这个和其他项目,这就是这个问题的原因.它不会将此项目添加到新的解决方案中,给出了我添加的文件类似的奇怪错误.

然后我将基础项目添加到该解决方案文件并尝试在那里添加.h和.cpp文件,但它添加了.cpp但是为.h文件提供了此错误.

这很奇怪,我更改了文件名但是同样的错误.

c++ visual-studio visual-studio-2015

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

异常在0x751fc52f,代码:0x71a:,flags = 0x1(执行无法继续)(第一次机会)

调试 Qt应用程序时,我在主题行中出现错误(使用Qt Creator 3.6.0)

我在构建和运行时没有得到它,但只有在我调试它时才会得到它.看起来正因为如此,我的调试器也表现得很时髦,有时它不会进入代码,有时它会,特别是重启Qt Creator时.

更重要的是,没有任何线索发生这种异常.我怎样才能得到这个异常,并可能让调试器停止发生?

c++ qt qt-creator

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

如何正常从COM错误中恢复?

我有一个第三方COM组件及其VC++中的c ++接口.我在下面的调用中遇到崩溃,这会导致我的应用程序崩溃.如何从这个不属于我的应用程序的功能中优雅地恢复?

inline _RecordsetPtr IGLibMgr::GetLibInfo ( _bstr_t LibPath ) {
    struct _Recordset * _result = 0;
    HRESULT _hr = raw_GetLibInfo(LibPath, &_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _RecordsetPtr(_result, false);
}
Run Code Online (Sandbox Code Playgroud)

它在最后一行崩溃了.我不认为我可以修改此代码,因为它是第三方COM的东西.我真的有什么选择?我只是想给用户打开消息框并优雅地返回.

c++ com mfc

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

这可能是一个误报内存泄漏报告吗?

我正在测试我创建的dll.它反过来使用其他几个dll.当我启动测试应用程序并退出时,我的Dll测试器应用程序报告内存泄漏,除了使用加载dll之外没有做任何事情LoadLibrary.它没有显示我的dll源代码中的确切文件.如果我不加载DLL,则没有泄漏.它是一个MFC DLL并具有App类.我从dll的app类中删除了所有内容,所以它什么也没做,但是当我加载它时我仍然会收到内存泄漏报告.我创建了另一组虚拟dll和测试应用程序,但是没有报告任何泄漏,所以它与我的原始dll有关,也许它与其他dll的链接?

我尝试过使用_crtBreakAlloc = {allocation_#};技术,但它也没有停止调试器.如果这个内存泄漏是真的,我很遗憾.我从文档中看到它可以报告误报.这可能是误报,因为我的dll与其他一些dll有关吗?我想不出别的因为我已经注释掉了dll的所有功能.

这是内存泄漏错误

Detected memory leaks!
Dumping objects ->
{250} client block at 0x00567E40, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $00567E40, 64 bytes long
a CDynLinkLibrary object at $00567E40, 64 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {244} normal block at 0x00567C20, 28 bytes long.
 Data: <   x            > E4 B8 07 78 05 00 00 00 05 00 00 00 01 00 00 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {243} normal block at …
Run Code Online (Sandbox Code Playgroud)

c++ dll mfc memory-leaks visual-studio-2010

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

等待QMutex断言

我发现即使在QMutex上进行简单的等待也会导致断言.我可能做错了什么?

QMutex mutex;

SyncMgr::SyncMgr(QObject *parent) : QObject(parent)
{
    moveToThread( &thread  );

    thread.start();

    process = new QProcess( this);

    connect( process, SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyReadStandardOutput() ) );
    connect( process, SIGNAL(readyReadStandardError()), this, SLOT(onReadyReadStandardError() ) );
}

SyncMgr::~SyncMgr()
{
    delete process;
}

void SyncMgr::onConnected()
{
    cmdDispatcher.sendGetSerialNo();

    // this asserts
    waitForResponse.wait( &mutex ); // waitForResponse is CWaitCondition object

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我得到断言,错误信息是:

ASSERT:'copy'在线程\ qmutex.cpp,第525行

c++ qt multithreading

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

错误 XA5301:无法为类生成 Java 类型

构建一个随书附带的 xamarin 项目,构建项目时出现此错误:

错误 XA5301:由于 MAX_PATH,无法生成类的 Java 类型:Android.Support.V4.View.Accessibility.AccessibilityManagerCompat/IAccessibilityStateChangeListenerImplementor:System.IO.DirectoryNotFoundException:找不到路径的一部分'

xamarin.android xamarin

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