我知道Ember有一个记录器,但我想创建自己的记录器用于学习目的.我有一个名为logger的服务,我希望能够在任何地方使用此服务.我没有问题将此服务注入组件,控制器等...我无法弄清楚如何将此服务注入到我创建的实用程序中而不通过create函数传递它.我不想在创建实用程序的任何地方都通过我的记录器.当我试图将它注入对象时,它抱怨不在容器中.最好的方法是什么?
我创建了一个基本的测试类来学习移动构造函数的工作原理.似乎没有调用移动构造函数,我不确定实际调用了什么构造函数.如果我使用std :: move然后调用移动构造函数,但是常规R值实际上不会调用它.为什么会发生这种情况,实际调用的构造函数是什么?我正在使用g ++ 4.6.3
#include <iostream>
#include <cstring>
class Test
{
int a;
int b;
int* c;
public:
Test(int one, int two)
{
std::cout << "Param Constructor" << "\n";
a = one;
b = two;
}
Test()
{
std::cout << "Default Constructor" << "\n";
a = 1;
b = 2;
}
~Test()
{
std::cout << "Deconstructor" << "\n";
}
Test(const Test& test)
{
a = test.a;
b = test.b;
std::cout << "Copy constructor called" << "\n";
}
Test(Test&& test) …Run Code Online (Sandbox Code Playgroud) 我已经看到这个问题了很多,但我仍然无法找到解决方案.那么一个适合我的解决方案.我有一个使用Apache POI的项目,我确保包含所有外部JAR.该项目在eclipse中编译并运行良好,但是当我用" java -jar Test.jar" 运行jar时,我收到此错误:
线程"main"中的异常java.lang.NoClassDefFoundError:org/apache/poi/ss/usermodel/Sheet
我不确定这是否是有用的信息,但我为我的项目创建了一个lib文件夹并将poi库放在那里.这意味着当我创建它时,依赖性在JAR文件中,我想我应该提到这一点,因为我看到了一些关于只在你的可执行jar旁边放置外部jar的解决方案.我也尝试将classpath设置为项目目录.
我似乎做错了什么?
我在编译循环依赖时遇到问题.我做了一些研究,人们建议使用前瞻性声明.我仍然遇到问题,因为具有前向声明的类正在使用转发类中的方法.这导致编译器给出错误"A类具有不完整的字段b".如何绕过A需要B的循环依赖,B需要A?
啊:
#ifndef A_H_
#define A_H_
#include <iostream>
//#include "B.h"
class A
{
class B;
private:
B b;
public:
A();
~A();
void method();
};
#endif
Run Code Online (Sandbox Code Playgroud)
A.cpp:
#include <iostream>
#include "A.h"
A::A()
{
}
A::~A()
{
}
void A::method()
{
b.method();
}
Run Code Online (Sandbox Code Playgroud)
BH:
#ifndef B_H_
#define B_H_
#include <iostream>
//#include "A.h"
class B
{
class A;
private:
A a;
public:
B();
~B();
void method();
};
#endif
Run Code Online (Sandbox Code Playgroud)
B.cpp:
#include <iostream>
#include "B.h"
B::B()
{
}
B::~B()
{
}
void B::method()
{
a.method(); …Run Code Online (Sandbox Code Playgroud) 我正在使用一个位置向右memmove移动std::string元素.目的地的第一个地方是唯一被弄乱并充满垃圾的地方.我正在使用memmove而不是strcpy因为我在需要模板的类中使用它.当我有一系列的int时,它工作正常.有关如何修复字符串的任何想法?
/**
* @brief Shifts elements in the array to the right
* @param newItem The insert position.
*/
template<class T>
void DynamicArray<T>::shiftElementsRight(uint newItem) {
uint diff = _size - newItem;
memmove(&(_array[newItem + 1]),
&(_array[newItem]), sizeof(_array[0]) * diff);
}
Run Code Online (Sandbox Code Playgroud)
我的主要
int main() {
DynamicArray<string> array(1);
string val1 = "val1";
array.add(val1);
string val2 = "val2";
array.add(val2);
// ... more additions ...
Run Code Online (Sandbox Code Playgroud)
最后一个输出:
Sizeof: 8
Value is: val1
Value is: val11val3, val21
????[val1, val2A????[val1, …Run Code Online (Sandbox Code Playgroud) 我正在寻找更详细的答案,而不是UB是UB.
我有一段遗留代码,我知道是异常的罪魁祸首.我们以前memset一个向量,一旦它被更改为unordered_map,它就会在销毁时抛出异常.在源代码中,memsetting一个向量与unordered_map有什么不同?它们都与连续的记忆相互作用......
在我们的代码中,我们有这个.(我为伪代码道歉,但重点应该是可以理解的......)
class B
{
std::vector<CustomObject> vect;
};
struct STRUCT_A
{
B b;
};
Run Code Online (Sandbox Code Playgroud)
后来我们这样做......
STRUCT_A m_struct_a;
memset(&m_struct_a, 0, sizeof(STRUCT_A));
Run Code Online (Sandbox Code Playgroud)
即使我们memset一个stl :: container,这个工作也很好!但是,如果我们将类B更改为具有映射,则析构函数上会发生异常.
class B
{
std::map<CustomObject> vect;
};
Run Code Online (Sandbox Code Playgroud)
所以我认为它与矢量是连续的有关,所以我把它改成了unordered_map
class B
{
std::unordered_map<CustomObject> vect;
};
Run Code Online (Sandbox Code Playgroud)
析构函数仍然会抛出异常.我觉得这很有趣,并认为这是一个很好的问题......