小编Mar*_*dik的帖子

受保护的成员在派生类中"未在此范围内声明"

#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课堂上看不到?

c++ inheritance templates

23
推荐指数
2
解决办法
1万
查看次数

你能省略main函数中的返回类型吗?

关于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这种情况下功能是否特别?

c++

19
推荐指数
3
解决办法
1517
查看次数

如何集成使用表达式模板的库?

我想在我的程序中使用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)

c++ templates encapsulation expression-templates eigen

17
推荐指数
1
解决办法
1178
查看次数

如何使用gcc 4.8使"本地和表达式"调试窗口运行?

我正在使用gcc 4.7和gcc 4.8以及QtCreator 2.7.1.

问题是,当我使用gcc 4.8时,我无法在调试模式的"Locals and Expressions"窗口中看到我的变量值 :

在此输入图像描述

虽然gcc 4.7工作正常:

在此输入图像描述

我试图通过使用QtCreator选项来修复此问题,但无济于事.

我不确定,如果这实际上与编译器版本有关,但是一旦我使用旧版本重建问题就会消失.

gcc qt-creator

16
推荐指数
2
解决办法
7050
查看次数

为什么在Kotlin init块中不允许`return`?

如果我编译这个:

class CsvFile(pathToFile : String)
{
    init 
    {
        if (!File(pathToFile).exists())
            return
        // Do something useful here
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

错误:(18,13)Kotlin:这里不允许"返回"

我不想与编译器争论,但我很好奇这个限制背后的动机.

kotlin

16
推荐指数
1
解决办法
3090
查看次数

如何按列对QTableView进行排序?

我正在使用它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++ qt qtableview

14
推荐指数
2
解决办法
3万
查看次数

如何重置随机数引擎?

我试图使用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)

c++ random c++11

13
推荐指数
2
解决办法
2714
查看次数

如何迭代哈希表实现?

我试图了解如何迭代实现的哈希表.我无法想象它.我对这种迭代的速度特别感兴趣.例如:

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())手术吗?

我试图挖掘源代码,但找不到合适的定义.

c++ hash complexity-theory qt iterator

12
推荐指数
1
解决办法
6976
查看次数

如何在Eigen中将行向量转换为列向量?

该文件说:

...在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)

这是一个错误,还是我错误地使用了库?

c++ eigen

12
推荐指数
1
解决办法
9356
查看次数

是否为包含相同值的范围定义了std :: nth_element?

从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++ algorithm c++-standard-library c++11

12
推荐指数
2
解决办法
600
查看次数