有时,当一个变量像一个数组或列表这样的对象集合时,它很容易将变量命名为复数.这没关系,还是我们应该总是坚持变量的单数名称?作为一个例子,一系列汽车可称为"汽车"或"汽车"
考虑另一个例子:
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) 该文件说:
如果在符号路径中包含字符串srv*,则调试器使用符号服务器从默认符号存储中获取符号.例如,以下命令告诉调试器使用符号服务器从默认符号存储中获取符号.这些符号不会缓存在本地计算机上.
.sympath srv*
然而,我发现的是符号被缓存.
我正在使用WinDbg 10并且默认缓存文件似乎是在创建时C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\sym当我删除它们并运行可执行文件时,路径设置为srv*符号,这里是下载的.
那么文档错了吗?
我已经构建了一个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()函数可以像我上面发布的那样简单.
我试过这个但是当我这样做时,终端问我密码.我不知道这个密码是什么?我的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版本并摆脱旧版本.我可能会选择一个新文件夹,但我不想这样做,它不允许我安装在当前文件夹上.
这非常疯狂,我只是将现有的.h文件添加到VS2015 C++项目中,但它会抱怨:
c:\ code\usbview\USBdevices.h的所需名称无效
当它有自己的.sln文件时,我能够将此文件添加到项目中.但是,我创建了一个新的空.sln文件,并希望添加这个和其他项目,这就是这个问题的原因.它不会将此项目添加到新的解决方案中,给出了我添加的文件类似的奇怪错误.
然后我将基础项目添加到该解决方案文件并尝试在那里添加.h和.cpp文件,但它添加了.cpp但是为.h文件提供了此错误.
这很奇怪,我更改了文件名但是同样的错误.
调试 Qt应用程序时,我在主题行中出现错误(使用Qt Creator 3.6.0)
我在构建和运行时没有得到它,但只有在我调试它时才会得到它.看起来正因为如此,我的调试器也表现得很时髦,有时它不会进入代码,有时它会,特别是重启Qt Creator时.
更重要的是,没有任何线索发生这种异常.我怎样才能得到这个异常,并可能让调试器停止发生?
我有一个第三方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的东西.我真的有什么选择?我只是想给用户打开消息框并优雅地返回.
我正在测试我创建的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) 我发现即使在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行
构建一个随书附带的 xamarin 项目,构建项目时出现此错误:
错误 XA5301:由于 MAX_PATH,无法生成类的 Java 类型:Android.Support.V4.View.Accessibility.AccessibilityManagerCompat/IAccessibilityStateChangeListenerImplementor:System.IO.DirectoryNotFoundException:找不到路径的一部分'
c++ ×8
mfc ×3
qt ×3
dll ×2
qt-creator ×2
com ×1
macos ×1
memory-leaks ×1
osx-yosemite ×1
stl ×1
windbg ×1
xamarin ×1