小编Mar*_*ica的帖子

pytest退出没有错误,但"收集0项"

我一直在尝试在python中使用pytest运行单元测试.我编写了一个模块,其中包含一个类和该类中的一些方法.我为这个模块写了一个单元测试(用一个简单的断言语句来检查列表的相等性),我首先用列表实例化该类.然后我在该对象上调用一个方法(来自该类).两者test.py和要测试的脚本都在同一个文件夹中.当我运行pytest它时,我得到"收集0项".

我是新手pytest,但能够成功运行他们的示例.我在这里错过了什么?

在Windows 7上运行Python版本3.5.1和pytest版本2.8.1.

我的test.py代码:

from sort_algos import Sorts

def integer_sort_test():
    myobject1 = Sorts([-100,10,-10])
    assert myobject1.merge_sort() == [-101,-100,10]
Run Code Online (Sandbox Code Playgroud)

sort_algos.py是一个包含类Sorts的模块.merge_sort是Sorts下的一种方法.

python unit-testing

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

C++与gradle

在Gradle 1.10发行说明http://www.gradle.org/docs/current/release-notes中我看到了提到的C++构建.

如何设置用gradle构建的C++项目?(没有IDE)

假设我有

ProjectFolder/hello.cpp
ProjectFolder/build.gradle
Run Code Online (Sandbox Code Playgroud)

hello.cpp:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts("Hello World!!!");
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

build.gradle这个C++项目应该什么基础

更新:我已经查看了用户指南的第72章和提到的2岁的例子.它们并不简单,但更复杂.

有1个文件示例,包含6行.我没有接触C++ 10年,我只是想快速启动,例如GCC.(尚未找到)

c++ gradle

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

std :: find_if中的C++ lambda表达式?

我有一个std :: map包含一个类,该类有一个id.我有一个我试图在集合中找到的id

typedef std::set<LWItem> ItemSet;
ItemSet selectedItems;
LWItemID i = someID;

ItemSet::iterator isi;
isi = std::find_if(selectedItems.begin(), selectedItems.end(), [&a](LWItemID i)->bool { return a->GetID()==i; } 
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说找不到lambda捕获变量,但我不知道我应该做什么来让它在迭代时捕获容器内容.另外,我知道我不能用循环来做这个,但我正在尝试学习lambda函数.

c++ algorithm lambda stl c++11

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

等于在c ++中返回false

我对cpp很新,我正在尝试做一个项目.它说代码必须以文件名作为参数,并将由以下代码运行:

./main -i filename
Run Code Online (Sandbox Code Playgroud)

我编写了一个for循环,它将遍历参数列表以找到"-i"参数,以便我可以确定文件名.但这一行总是返回false:

argv[i] == "-i"
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

#include <string>
#include <iostream>

int main(int argc, char *argv[]) {
    std::string test = argv[0];
    for(int i = 0; i < argc; i++){
        if(argv[i] == "-i"){
            test = argv[i+1];
            break;
        }
    }
    std::cout << test;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ g++ command-line-arguments

17
推荐指数
2
解决办法
2463
查看次数

Typesafe可变参数函数

我想编写一个接受可变数量的字符串文字的函数.如果我用C语写作,我必须写一些类似于:

void foo(const char *first, ...);
Run Code Online (Sandbox Code Playgroud)

然后调用看起来像:

foo( "hello", "world", (const char*)NULL );
Run Code Online (Sandbox Code Playgroud)

感觉它应该可以在C++中做得更好.我想出的最好的是:

template <typename... Args>
void foo(const char* first, Args... args) {
    foo(first);
    foo(args);
}

void foo(const char* first) { /* Do actual work */ }
Run Code Online (Sandbox Code Playgroud)

被称为:

foo("hello", "world");
Run Code Online (Sandbox Code Playgroud)

但是我担心递归本质,以及我们在得到单个参数之前不进行任何类型检查的事实,如果有人调用,会使错误混乱foo("bad", "argument", "next", 42).我想要写的,是这样的:

void foo(const char* args...) {
    for (const char* arg : args) {
        // Real work
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

编辑:还有选项void fn(std::initializer_list<const char *> args),但这使得foo({"hello", "world"});我想避免的呼叫.

c++ templates variadic-templates c++11 c++17

16
推荐指数
3
解决办法
1172
查看次数

函数返回由向量组成的元组

我试图在我的函数中避免输出参数.旧功能是:

void getAllBlockMeanError(
    const vector<int> &vec, vector<int> &fact, vector<int> &mean, vector<int> &err)
Run Code Online (Sandbox Code Playgroud)

这里vec是输入参数,fact,meanerr输出参数.我试图将输出参数分组为一个元组:

tuple< vector<int>, vector<int>, vector<int> > 
                                  getAllBlockMeanErrorTuple(const vector<int> &vec)
{
    vector<int> fact, mean, err;
    //....
    return make_tuple(fact, mean, err);
}
Run Code Online (Sandbox Code Playgroud)

现在我可以调用新函数:

tie(fact, mean, err) = getAllBlockMeanErrorTuple(vec);
Run Code Online (Sandbox Code Playgroud)

它对我来说看起来更干净.虽然我有一个问题,如何平等分配tie(fact, mean, err)工作?它是做深拷贝还是移动?因为fact,meanerrgetAllBlockMeanErrorTuple就会被破坏,我希望它做的举动,而不是深拷贝.

c++ tuples function c++11

13
推荐指数
2
解决办法
1454
查看次数

具有相同名称但在C++中具有不同成员的结构

按照书中的C++编程语言(Bjarne Stroustrup),在第15.2.3节(一个定义规则)第425页,我编写如下程序:

file1.cpp

struct S2 { int a; char b; };
Run Code Online (Sandbox Code Playgroud)

file2.cpp

struct S2 { int a; char bb; };
int main(){ return 0;}
Run Code Online (Sandbox Code Playgroud)

编译我试过下面的命令.

g++ -std=c++11 file1.cpp file2.cpp
Run Code Online (Sandbox Code Playgroud)

clang++ -std=c++11 file1.cpp file2.cpp
Run Code Online (Sandbox Code Playgroud)

这两个命令都生成可执行文件,没有任何错误或警告.但是按照书中这个例子应该给出错误.

c++ one-definition-rule undefined-behavior c++11

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

编译器无法推断出std :: max的重载

用我的编译器

typedef const double&(*fT)(const double&, const double&);
typedef std::function<const double&(const double&, const double&)> std_func;

fT f1 = std::max<double>;                            //(1)
std_func f2 = static_cast<fT>(std::max<double>);     //(2)
std_func f3 = f1;                                    //(3) 
Run Code Online (Sandbox Code Playgroud)

(1,2,3)工作但是

auto f4 = std::max<double>;                          //(4)
std_func f5 = std::max<double>;                      //(5) 
Run Code Online (Sandbox Code Playgroud)

(4,5)不要.编译器抱怨它无法选择案例5的重载.

这种行为是否正常?

什么是最便携和正确的写作方式?

c++ stl overload-resolution std-function

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

更改符号名称和嵌入bitcode

tl; dr:我收到此错误消息:

ld: -alias_list and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES)
cannot be used together
Run Code Online (Sandbox Code Playgroud)

我如何解决它?


我正在尝试创建自己的第三方库版本.我想确保我的所有调用都没有进入该库的系统版本,因此我使用--alias-list在所有符号上添加前缀,并生成一个头文件,该文件将所有符号重命名fooMJB_foo.然后,--include无论何时我想使用此库,我的构建系统都会包含此头文件.

这在Android和Linux上运行良好(我非常确定它最终也适用于Windows).但是,当我尝试链接共享库时,我收到上述错误.我如何达到同样的效果?

linker linker-errors ios bitcode

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

在C++中#include <iostream>?

我读过,#include <file>在编译之前,会将C++预处理器中的"文件"粘贴到我们的源文件中.

这是否意味着iostream只要我们编译源文件,"file"()也会一次又一次地编译?

在C++完成它的工作之后,中间文件的大小也会有"文件"+"源文件大小"的字节吗?

c++

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