#include <vector>
#include <iostream>
template <class T>
class Base
{
protected:
std::vector<T> data_;
};
template <class T>
class Derived : public Base<T>
{
public:
void clear()
{
data_.clear();
}
};
int main(int argc, char *argv[])
{
Derived<int> derived;
derived.clear();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法编译这个程序.我明白了:
main.cpp:22: error: 'data_' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
拜托,你能解释为什么data_在Derived课堂上看不到?
关于main功能的声明是否有一些特殊规则?
根据ideone,这是合法的C++:
main() // As opposed to int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,正常函数似乎没有权限避免返回类型:
f(){}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
prog.cpp:1:3:错误:ISO C++禁止声明'f'没有类型[-fpermissive] f(){} ^
main这种情况下功能是否特别?
我想在我的程序中使用Eigen矩阵库作为线性代数引擎.Eigen使用表达式模板来实现延迟评估并简化循环和计算.
例如:
#include<Eigen/Core>
int main()
{
int size = 40;
// VectorXf is a vector of floats, with dynamic size.
Eigen::VectorXf u(size), v(size), w(size), z(size);
u = 2*v + w + 0.2*z;
}
Run Code Online (Sandbox Code Playgroud)
由于Eigen使用表达式模板,代码如
u = 2*v + w + 0.2*z;
Run Code Online (Sandbox Code Playgroud)
在上面提到的样品中,减少到长度为10的单个环(不是40,浮子被4个块放入调节器中)而不会产生临时的.多么酷啊?
但如果我像这样集成库:
class UsingEigen
{
public:
UsingEigen(const Eigen::VectorXf& data):
data_(data)
{}
UsingEigen operator + (const UsingEigen& adee)const
{
return UsingEigen(data_ + adee.data_);
}
...
private:
Eigen::VectorXf data_;
}
Run Code Online (Sandbox Code Playgroud)
那么表达式就像:
UsingEigen a, b, c, d;
a = b + c …Run Code Online (Sandbox Code Playgroud) 我正在使用gcc 4.7和gcc 4.8以及QtCreator 2.7.1.
问题是,当我使用gcc 4.8时,我无法在调试模式的"Locals and Expressions"窗口中看到我的变量值 :

虽然gcc 4.7工作正常:

我试图通过使用QtCreator选项来修复此问题,但无济于事.
我不确定,如果这实际上与编译器版本有关,但是一旦我使用旧版本重建问题就会消失.
如果我编译这个:
class CsvFile(pathToFile : String)
{
init
{
if (!File(pathToFile).exists())
return
// Do something useful here
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
错误:(18,13)Kotlin:这里不允许"返回"
我不想与编译器争论,但我很好奇这个限制背后的动机.
我正在使用它QTableView来显示QAbstractTableModel:
#include <QtGui/QApplication>
#include <QAbstractTableModel>
#include <QTableView>
class TestModel : public QAbstractTableModel
{
public:
int rowCount(const QModelIndex &parent = QModelIndex()) const
{
return 2;
}
int columnCount(const QModelIndex &parent = QModelIndex()) const
{
return 2;
}
QVariant data(const QModelIndex &index, int role) const
{
switch (role)
{
case Qt::DisplayRole:
{
return 4 - index.row() + index.column();
}
}
return QVariant();
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView table;
TestModel model;
table.setModel(&model);
table.setSortingEnabled(true);
table.sortByColumn(0, …Run Code Online (Sandbox Code Playgroud) 我试图使用C++ 11方法生成随机数:
#include <random>
#include <functional>
#include <iostream>
int main(int argc, char *argv[])
{
std::normal_distribution<double> normal(0, 1);
std::mt19937 engine; // Mersenne twister MT19937
auto generator = std::bind(normal, engine);
int size = 2;
engine.seed(0);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;
std::cout << std::endl;
engine.seed(1);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;
std::cout << std::endl;
engine.seed(0);
normal.reset();
for (int i = 0; i < size; …Run Code Online (Sandbox Code Playgroud) 我试图了解如何迭代实现的哈希表.我无法想象它.我对这种迭代的速度特别感兴趣.例如:
QHash<int, std::string> hashTable;
...
for (auto it = hashTable.begin(); it != hashTable.end(); ++it)
std::cout << it.value() << std::endl;
Run Code Online (Sandbox Code Playgroud)
这是一个O(hashTable.size())手术吗?
我试图挖掘源代码,但找不到合适的定义.
该文件说:
...在Eigen中,向量只是矩阵的一个特例,有1行或1列.他们有1列的情况是最常见的; 这种矢量称为列矢量,通常缩写为矢量.在他们有1行的另一种情况下,它们被称为行向量.
但是,该程序输出的结果不直观:
#include <eigen3/Eigen/Dense>
#include <iostream>
typedef Eigen::Matrix<double, 1, Eigen::Dynamic> RowVector;
int main(int argc, char** argv)
{
RowVector row(10);
std::cout << "Rows: " << row.rows() << std::endl;
std::cout << "Columns: " << row.cols() << std::endl;
row.transposeInPlace();
std::cout << "Rows: " << row.rows() << std::endl;
std::cout << "Columns: " << row.cols() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Rows: 1
Columns: 10
Rows: 1
Columns: 10
Run Code Online (Sandbox Code Playgroud)
这是一个错误,还是我错误地使用了库?
从std :: nth_element的文档中我们得到:
template< class RandomIt >
void nth_element( RandomIt first, RandomIt nth, RandomIt last );
Run Code Online (Sandbox Code Playgroud)
按升序对范围[first,last]进行部分排序,使得[first,nth]范围内的所有元素都小于 [nth,last] 范围内的所有元素.
困扰我的东西是不太字.不应该少或平等吗?如果范围是例如:
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> numbers = {3, 2, 2, 2, 1};
auto middlePosition = numbers.begin() + 2;
std::nth_element(numbers.begin(), middlePosition, numbers.end());
for (int x : numbers)
std::cout << x << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该算法不能使两个数字都middlePosition 小于 2,因为只有一个这样的数字.该算法尽力而为,输出符合要求:
1
2
2 …Run Code Online (Sandbox Code Playgroud) c++ ×8
c++11 ×2
eigen ×2
qt ×2
templates ×2
algorithm ×1
gcc ×1
hash ×1
inheritance ×1
iterator ×1
kotlin ×1
qt-creator ×1
qtableview ×1
random ×1