gpt4 book ai didi

c++ - 构造函数采用参数时的GTest夹具?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:11 25 4
gpt4 key购买 nike

我有一个简单的示例类。它有一个数据成员,它是一个指向 Armadillo 矩阵的指针的 std::vector。构造函数将这样一个 vector 作为唯一的参数。这是文件 TClass.cpp:

#include <armadillo>
#include <vector>

class TClass {
private:
std::vector<arma::mat * > mats;
public:
TClass(std::vector<arma::mat * > m_);
arma::mat * GetM( int which ){ return( mats.at(which) );};

};

TClass::TClass(std::vector<arma::mat * > m_){
mats = m_;
}

我想构造一个 GTest fixture 来测试成员函数 GetM。这是我所做的:

#include <gtest/gtest.h> 
#include "TClass.cpp"


class TClassTest : public ::testing::Test {
protected:
int n;
int m;
std::vector<arma::mat * > M;

virtual void SetUp() {
n = 3;
m = 2;
arma::mat M1 = arma::randu<arma::mat>(n,m);
arma::mat M2 = arma::randu<arma::mat>(n,m);
M.push_back( &M1);
M.push_back( &M2);
}

// virtual void TearDown() {}

// initiate a TClass object
TClass T(M);
};

// my test
TEST_F(TClassTest, CanGetM1){

EXPECT_EQ( T.GetM(0), M.at(0) );

}

int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

我用 g++ TClassTest.cpp -o tclass -larmadillo 编译它。它告诉我 TClassTest.cpp:24: error: ‘M’ is not a type。我不明白为什么我不能在夹具定义中构造 TClass 对象?

最佳答案

对象 T 不能在类 TClassTest 的声明中初始化。你最近一直在写 Java 吗? ;-)

要初始化它,你可以这样做:

class TClassTest : public ::testing::Test {
// ... (rest of code is fine as is)
virtual void SetUp() {
// ...
T = new TClass(M);
}

virtual void TearDown() { delete T; }

TClass *T;
};

关于c++ - 构造函数采用参数时的GTest夹具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com