簡體   English   中英

谷歌測試:“從寬字符串初始化的字符數組”

[英]Google Test: “char-array initialized from wide string”

我已經實現了類型參數化測試( 示例 #6 )以將相同的測試用例應用於多個 class。 碰巧將字符串分配給signed char[]unsigned char[]const signed char[]const unsigned char[]時,我得到:

../stackoverflow.cpp: In member function ‘void IosTest_DummyTest_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = std::basic_istream<char, std::char_traits<char> >]’:                           
../stackoverflow.cpp:34:   instantiated from here
../stackoverflow.cpp:32: error: char-array initialized from wide string

更有趣的是,當將測試用例應用於一種類型時,一切都很好,但是當我添加第二種類型時,它就崩潰了。 我可以在以下代碼中重現錯誤:

#include "gtest/gtest.h"
#include <iostream>

// Factory methods
template<class T> std::ios* CreateStream();

template<>
std::ios* CreateStream<std::istream>() {
  return &std::cin;
}

template<>
std::ios* CreateStream<std::ostream>() {
  return &std::cout;
}

// Fixture class
template<class T>
class IosTest: public ::testing::Test {
 protected:
  IosTest() : ios_(CreateStream<T>()) {}
  virtual ~IosTest() {}
  std::ios* const ios_;
};

using testing::Types;
typedef Types<std::istream, std::ostream> Implementations;
TYPED_TEST_CASE(IosTest, Implementations);

TYPED_TEST(IosTest, DummyTest) {
  signed char c[] = ".";
  this->ios_->fill(c[0]);
};

在行typedef Types<std::istream, std::ostream> Implementations; 創建了一個名為Implementations的類型列表,在下面的行中, TYPED_TEST_CASE(IosTest, Implementations); , 定義了測試用例IosTest將被應用到Implementations列表中定義的類型。

正如我已經說過的,如果我從Implementations列表中刪除std::istreamstd::ostream ,我可以編譯並運行測試而不會發出任何警告(我正在使用-Wall標志)。 誰能解釋這種現象?

是否有可能您的 gtest 庫是使用您正在編譯應用程序 (stackoverflow.cpp) 的不同版本編譯器構建的? 我記得看到此錯誤消息與我使用較新版本的 gcc 構建的庫相關,並嘗試將其與舊版本的 gcc 鏈接。

您可以嘗試從源代碼構建 gtest。 它帶有一個腳本,可以將所有內容提取並融合到一個 header 文件和一個 cpp 文件中。

在您的 gtest 安裝中查找此 python 腳本:

gtest/scripts/fuse_gtest_files.py

腳本中有關於如何運行它的說明。 你最終得到兩個文件:

  • gtest-all.cc
  • gtest.h

您只需執行一次並將其添加到您的 makefile 中。 我這樣做是為了向客戶分發基於 Linux 的應用程序。

它看起來像這里描述的 GCC 錯誤。

如果你改變有signed char c[] = "."; char c[] = "."; 一切似乎都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM