草庐IT

c++ - 从单元测试 .EXE 项目中引用来自 VC++ .EXE 项目的类

我有一个旧的遗留C++应用程序,我正在尝试为其编写一些单元测试。我在我的解决方案中创建了第二个项目,该项目构建为单元测试可执行文件(使用googletest)。测试项目引用主项目的头文件。在我尝试使用主项目中的类之一之前,测试项目构建良好。#include"stdafx.h"#include"JsContext.h"#include"gtest/gtest.h"TEST(JsContextTests,CreateJsContext){JsContextcontext;//linkingfailsassoonasthislineisadded}产生..Error1errorLNK2001

c++ - 在类(class)内任何时候已知的类(class)成员

我一直认为,如果我在类内部声明一个类的成员,那么这个成员在类的整个范围内都是已知的:classX{public:X(inta):v_(a){}private:intv_;//eventhoughv_isdeclaredhereI'musingitinctorwhichisabovethisline};所以这对我来说很有意义。无论如何,这不是因为我得到了v_未知的错误classX{public:X(decltype(v_)a):v_(a)//erroronthisline,compilerdoesn'tknowv_{}private:intv_;};很乐意了解原因。我正在使用英特尔编译器

创建其构造函数引用全局变量的类的全局实例时,c++程序崩溃

我正在尝试创建一个类的全局实例,该类的构造函数引用了一个全局变量。程序编译没有错误。但是当它运行时,它会在引用全局变量时崩溃。如何在构造函数不崩溃的情况下创建此类的全局实例?这是我做的SSCCE:/*main.cpp*/#include"TestClass.h"//IneedaglobalinstanceofTestClassTestClassj;intmain(){return0;}-/*C.h*/#ifndefC_H_INCLUDED#defineC_H_INCLUDED#include//globalexternconststd::stringS;#endif//C_H_INCL

c++ - 如何在 C++ 中声明一个 friend 是另一个尚未定义的类的成员函数?

我如何声明B的构造函数是A的友元?我试过:classA{private:A();public:friendB::B();};classB{public:B();}; 最佳答案 将B::替换为class;classA{private:A();public:friendclassB;};classB{public:B();}; 关于c++-如何在C++中声明一个friend是另一个尚未定义的类的成员函数?,我们在StackOverflow上找到一个类似的问题: h

c++ - 编译器为具有引用和常量成员的类生成的复制/赋值函数

我正在阅读的书说,当您的类包含引用成员或常量成员时,使用编译器生成的复制构造函数或赋值运算符将不起作用。例如,#include#includeusingnamespacestd;classTextBlock{public:TextBlock(stringstr):s(str){cout根据我的书,TextBlockq(p);和q=p;这两个行都应该返回编译器错误。但是使用Linux的g++编译器时,我只收到q=p;行的错误当我注释掉它时,它工作正常并且代码编译。正确的s是Q的输出,所以它显然是由编译器生成的复制构造函数复制的。当我将string&s;行更改为conststrings时,

c++ - 对于具有抛出复制构造函数和 noexcept 按值复制赋值的类,is_nothrow_copy_assignable 的值是多少?

根据C++标准,以下程序的预期(如果有)输出是什么:#include#include#includeclassA{public:A()=default;~A()=default;A(Aconst&other){}A(A&&other)noexcept{}A&operator=(Aother)noexcept{return*this;}};intmain(){std::cout::value::value换句话说,类型特征值的评估是否只看赋值运算符的声明,即noexcept,并因此产生truetrue或者它是否考虑调用上下文(a、b是A的实例)a=b;//maythrow,implici

具有构造函数的类的 C++ vector

//Usingg++andubuntu.#includeusingnamespacestd;定义一个类:classfoo(){(...)foo(intarg1,doublearg2);}构造函数:foo::foo(intarg1,doublearg2){(...)//arrayswhoselengthdependuponarg1andarg2}我想做这样的事情:vectorbar(10);//error:nomatchingfunctionforcallto'foo::foo()'bar[0]=newfoo(123,4.56);(...)另一种方法(我不太喜欢)是使用push_back

c++ - 从模板基类派生的类的隐式转换

我在隐式转换、模板和模板类继承方面遇到了问题。以下是我从我的项目中提取的内容,我省略了一些类甚至是抽象的,但这与大小写无关。classA{};classB:publicA{};templateclassBase{};classDerived:publicBase{};intmain(){Derivedd;Base*base=newDerived();}基本上,我有一个模板基类Base我得出Derived:publicBase从。然后我必须将它转换为最常见的Base形式,即Base.我原以为我可以转换一个派生自Base的对象至Base隐含地,作为B源自A.我做错了什么或者我怎么能隐式?这

c++ - 模板成员函数的参数推导不适用于在函数内部声明的类?

structTest{templatevoidprint(T&t){t.print();}};structA{voidprint(){printf("A");}};structB{voidprint(){printf("B");}};voidtest_it(){Aa;Bb;Testt;t.print(a);t.print(b);}这编译得很好。structTest{templatevoidprint(T&t){t.print();}};voidtest_it(){structA{voidprint(){printf("A");}};structB{voidprint(){printf(

c++ - 这段代码如何创建一个只有私有(private)构造函数的类的实例?

我正在开发一个声音库(使用OpenAL),并从FMOD提供的界面中获得灵感,您可以看到界面atthislink.我提供了一些概念,例如:Sound、Channel和ChannelGroup,正如您通过FMOD接口(interface)看到的那样,所有这些类都有一个私有(private)构造函数,例如,如果您要创建一个Sound,您必须使用函数createSound()由System类提供(与创建Channel或ChannelGroup相同)。我想提供一个类似的机制,但我不明白它背后是如何工作的。例如,createSound()函数如何创建新的Sound实例?构造函数是私有(privat