小编sor*_*h-r的帖子

如何在使用单个测试项目时将所有QtTestLib单元测试结果组合在一个文件中?

在我们的项目中,我们使用QtTestLib进行单元测试.原因是整个项目在可能的情况下已经使用Qt并且它是一个GUI应用程序,因此我们希望能够测试GUI界面.

我们的项目是由MSVC编译的,所以我们不希望每个测试都有一个单独的项目文件,因为它会使解决方案变得混乱.因此,我们为所有测试创建了一个项目.所有测试都应该在CIS上自动进行(持续集成),因此我们尝试使用一些XSLT转换通过XML格式的输出文件将测试插入Hudson.

但似乎测试输出存在问题.如果对所有测试使用单个main(),并且仅向每个测试传输cmd行参数:

#include "MyFirstTest.h"
#include "MySecondTest.h"

int main(int argc, char **argv)
{
  int result = 0;
  MyFirstTest test1;
  result |= QTest::qExec(&test1, argc, argv);
  MySecondTest test2;
  result |= QTest::qExec(&test2, argc, argv);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个多次重写的结果文件.因此,如果您想使用输出文件(例如xml)稍微自动化它,您将只获得其中的最后结果.所有其他都将被覆盖.

我们已经尝试过这种方法,它不能让你使用像Hudson这样的连续集成系统.所以我的问题是:有没有机会在一个输出文件中附加结果?当然,我们可以使用一些解决方法,例如通过QTest :: qExec()运行每个测试,并使用修改后的参数将结果写入单独的文件,但这似乎不是最好的方法.理想情况下,我希望有一个结果文件与CIS一起使用.

c++ qt qttest qtestlib

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

打开MySQL数据库时应用程序崩溃

我在Windows 7×64上使用Qt 5.0.0(个人编译 - MinGW x64).我在配置中添加了MySQL支持,并在系统上安装了MySQL.MySQL库,头文件在应用程序中可见.

程序在打开数据库时崩溃.我像这样打开数据库:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("My DB name");
db.setUserName("root");
db.setPassword("My password");
db.setHostName("localhost");
db.setPort(3306);
try{
db.open(); // <=== Crashes without throwing an exception
}
catch(std::exception e)
{
    std::cout << e.what() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

笔记:

qDebug() << QSqlDatabase::drivers();
Run Code Online (Sandbox Code Playgroud)

版画

("QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QSQLITE")
Run Code Online (Sandbox Code Playgroud)

操作系统生成的问题签名如下所示:

Problem Event Name: APPCRASH
Application Name: CMS.exe
Application Version: 0.0.0.0
Application Timestamp: 51010cdd
Fault Module Name: Qt5Sql.dll
Fault Module Version: 5.0.0.0
Fault Module Timestamp: 50f6b734
Exception Code: c0000005
Exception Offset: 00000000000df950 …
Run Code Online (Sandbox Code Playgroud)

mysql qt qt5

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

如何将nullptr引入CDT代码分析器?

我在Eclipse CDT中遇到了代码分析器错误.它与C++ 11功能不兼容.__GXX_EXPERIMENTAL_CXX0X__已定义,并设置了编译器标志.库编译并正常工作,虽然我找不到告诉Eclipse这nullptr是一个关键字的方法!请不要突出显示它.

愚蠢的Eclipse :)

我正在使用当前LTS Ubuntu(12.04)的默认版本.这是Indigo(3.7.2).

c++ eclipse-cdt c++11

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

libtool:i686-pc-mingw32共享中不允许使用未定义的符号

我正在使用autotools作为我的库的构建系统.最近,库被移植到Windows.虽然我遇到了一个奇怪的错误,但库成功编译并成功链接.配置和make后只有静态库.除了以下警告之外,Evertything看起来还不错libtool:

libtool: undefined symbols not allowed in i686-pc-mingw32 shared
Run Code Online (Sandbox Code Playgroud)

我通过以下代码导出了Windows机器的所有符号:

#ifdef _WIN32
#    ifdef DLL_EXPORT
#        define LIBRARY_API __declspec(dllexport)
#    else
#        define LIBRARY_API __declspec(dllimport)
#    endif
#endif
#ifndef _WIN32
#    define LIBRARY_API
#endif
Run Code Online (Sandbox Code Playgroud)

在我的每一个定义中:

class LIBRARY_API myClass {
// ...
Run Code Online (Sandbox Code Playgroud)

:
操作系统:Windows 8 x86_64
编译器套件:MinGW x86_64,MSYS x86

c++ mingw libtool mingw-w64

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

在qmake命令行中定义一个字符串

我需要将一个字符串作为定义传递给我的源代码,这是一个base64编码的字符串(因此可能包含/").我正在使用qmake和g ++.我尝试过这么多组合,但都不起作用:

qmake DEFINES+=SERIAL=\\\"f9a/z\\\"
qmake DEFINES+=SERIAL=\"f9a/z\"
qmake DEFINES+="SERIAL=\\"f9a/z\\\""
Run Code Online (Sandbox Code Playgroud)

G ++应该得到这样的序列:

g++ -DSERIAL=\"f9a/z\"
Run Code Online (Sandbox Code Playgroud)

qmake g++

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

并行算法产生一组的所有可能序列

在尝试生成给定字符集的所有可能字符串时,我遇到了困难.让我们S设置符号.我需要处理所有可能的S长度组合n.例如,如果S={'a','b','+','-'}n=4算法应该处理以下序列:

aaaa
aaab
abab
+aa-
// And all other sequences in the universe
Run Code Online (Sandbox Code Playgroud)

目前我的算法是下面描述的非有效递归算法.我有两个问题:

  1. 有更快的算法吗?
  2. 是否有并行算法来解决这个问题?

当前实施:(简化)

void workhorse(vector<char> &input, vector<char>::iterator i)
{
    if(i==inputs.end()) {
        // process the input
        return;
    }
    else {
        for( const auto& symbol : S) {
            *i=symbol;
            workhorse(input, i+1);
        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

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

使用C数组语法将GNU Octave(或Matlab)矩阵输出到文件中

我有一个八度的大矩阵,需要将其数据导入到我的C ++代码中。矩阵是所有数字,我想将其另存为C数组在头文件中。

例如:

> # octave:
results =

  -3.3408e+01  -5.0227e+00   4.3760e+01   3.2487e+01   1.0167e+01   4.1076e+01   6.3226e+00  -3.7095e+01   1.3318e+01   3.8582e+01
  -2.1087e+01  -6.1606e+00   4.8704e+01   3.1324e+01   3.0287e+01   4.0114e+01   1.5457e+01  -3.6283e+01   2.6035e+01   4.0112e+01
Run Code Online (Sandbox Code Playgroud)

所需的输出:

/* In some foo.h */

static const float results = {   
    3.3408e+01,-5.0227e+00,4.3760e+01,3.2487e+01,1.0167e+01,4.1076e+01,6.3226e+00,-3.7095e+01,1.3318e+01,3.8582e+01,
    2.1087e+01,-6.1606e+00,4.8704e+01,3.1324e+01,3.0287e+01,4.0114e+01,1.5457e+01,-3.6283e+01,2.6035e+01,4.0112e+01,
};
Run Code Online (Sandbox Code Playgroud)

c c++ matlab matrix octave

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

如何在特定提交之前截断 git 历史记录?

将所有二进制文件错误地添加到我的 git 历史记录中后,我有一个大小约为 50 MB 的 git 存储库。如何从历史记录中删除特定提交之前的所有提交?例如,具有以下历史记录,我想删除 C2 之前的所有提交,就像 C2 是第一次提交一样。(实际上C2可能是合并提交)

我已经尝试过git-filter-branch,它根本不能满足我的需要,而且这个脚本似乎很受欢迎,尽管它删除了整个历史记录;留下一个提交。

历史

git

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

我应该如何在菱形模式中调用父移动构造函数?

考虑遵循菱形多重继承:

class base;
class d1 : virtual public base;
class d2 : virtual public base
class d3 : public d1, public d2;
Run Code Online (Sandbox Code Playgroud)

base是一个只移动的类(具有一个大的仅移动缓冲区).所以d1,d2d3.移动构造函数d1d2调用移动构造函数base.

然后应该做什么移动构造函数d3?调用d1和d2的移动控制器会导致崩溃(因为移动构造函数base被调用两次.

在这里,我有一个问题的最小可编译实例:

#include <iostream>

struct moveonly {
    moveonly(): data(nullptr) {}
    moveonly(const moveonly &) = delete;
    moveonly(moveonly &&other) {
        this->data = other.data;
        other.data = nullptr;
    }
    ~moveonly() {
        if(data)
            delete[] data;
    }
    char *data;
};

class base {
    public:
        base() = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor diamond-problem move-semantics c++11

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

可变参数模板函数对非可变参数的特殊化

我有一个函数模板,该函数至少接受一个参数并对其余参数执行一些格式化:

template <typename T, typename... ARGS>
void foo(T first, ARGS&&... args)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

当第一个参数是特定类型时,我希望它做不同的事情。我喜欢编译器选择这个特定的版本,其中其余的可变参数被忽略。所以我尝试了模板专业化:

template <>
void foo(const ICON* p)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者:

template <typename T, typename... ARGS>
void foo(const ICON* p, ARGS&&... args)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了非模板化重载,但它总是选择第一个版本。

调用者代码应该根本不知道模板(遗留代码、向后兼容性废话等),因此它依赖于类型推导和如下调用:

MyClass fooMaker;
fooMaker.set("A", "B", 3.14, 42); // v1
fooMaker.set(pIcon);              // v2 (special)
Run Code Online (Sandbox Code Playgroud)

c++ templates function-templates overload-resolution variadic-templates

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