我是C ++的新手,正在尝试设置矩阵类。矩阵是从initializer_list包含vector<int>条目的矩阵行中创建的。此类的方法之一应该是get_row(size_t rownumber)。当我从构造函数调用实现的方法时,它将返回正确的结果。但是,当从中调用相同的方法时main(),每行的前两个元素包含一些不应在其中的巨大数字。
我认为问题与指针有关。虽然,我真的找不到在构造函数内部的调用和main内部的调用之间矩阵元素可以覆盖的地方。当我在Eclipse中进入调试模式时,指针似乎指向了预期的地址...
#include <iostream>
#include <vector>
using namespace std;
template<typename T> class myMatrix {
private:
initializer_list<vector<int>>::iterator it;
initializer_list<vector<int>> matrix;
public:
myMatrix(initializer_list<T> values) {
matrix = values;
vector<int> chosen_row = get_row(1);
cout << "Called from constructor: ";
for (unsigned i = 0; i != chosen_row.size(); i++) {
cout << chosen_row.at(i) << " ";
}
}
vector<int> get_row(size_t x) {
it = matrix.begin() + x - 1;
return (*it);
}
};
int …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用c ++样式类型转换。为此,我创建了一个模板类pClass,它接受一些T类型的元素并将其打印出来。
现在,我想(例如)将type的实例转换pClass<char>为pClass<int>。但是,非我的类型转换尝试似乎按预期方式工作。
我已经发现它dynamic_cast用于在运行时以及处理虚拟函数/多态类时进行转换,在此情况并非如此。static_cast用于在编译时进行转换。那么,对于我来说,static_cast应该是正确的选择吗?
这里有关stackoverflow的一些主题也有类似的问题,但是仅当处理多个类并在它们之间进行继承时才有类似的问题。不幸的是,我无法真正将它们与我的问题联系起来(例如,模板调用之间的C ++ Casting)。
#include <iostream>
template <typename T>
class pClass {
public:
T value;
pClass(T value) {
this->value = value;
std::cout << value << std::endl;
}
virtual ~pClass() {}
};
int main() {
pClass<int> pInt(5);
pClass<char> pChar('a');
pClass<float> pFloat(4.2f);
// pClass<int> pInt2 = static_cast<pClass<int>&>(pChar); // gives invalid type conversation
// pClass<int>& pInt3 = dynamic_cast<pClass<int>&>(pChar); // warning: dynamic_cast of ‘pClass<char> pChar’ to ‘class pClass<int>&’ can …Run Code Online (Sandbox Code Playgroud)