Skip to content

Circular includes lead to compilation errors #3540

@kiner-shah

Description

@kiner-shah

Issue description

There are circular includes in files leading to failing compilation of a very simple program

Your environment

  • version of mlpack: 4.2.0
  • operating system: Ubuntu 22.04
  • compiler: GCC 11.3.0
  • version of dependencies (Boost/Armadillo): 10.8.2
  • any other environment information you think is relevant:

Steps to reproduce

Try compiling this simple one-line file sample.cpp:

#include <mlpack/methods/linear_regression.hpp>

Use the command: g++ sample.cpp -o sample -I mlpack-4.2.0/build/installdir/include -larmadillo

Expected behavior

The program compiles.

Actual behavior

Getting errors:

In file included from mlpack-4.2.0/build/installdir/include/mlpack/core/dists/dists.hpp:20,
                 from mlpack-4.2.0/build/installdir/include/mlpack/core.hpp:50,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression/linear_regression.hpp:16,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression.hpp:15,
                 from sample.cpp:1:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:34:3: error: ‘LinearRegression’ does not name a type
   34 |   LinearRegression rf;
      |   ^~~~~~~~~~~~~~~~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:84:9: error: ‘LinearRegression’ does not name a type
   84 |   const LinearRegression& Rf() const { return rf; }
      |         ^~~~~~~~~~~~~~~~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:86:3: error: ‘LinearRegression’ does not name a type
   86 |   LinearRegression& Rf() { return rf; }
      |   ^~~~~~~~~~~~~~~~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp: In constructor ‘mlpack::RegressionDistribution::RegressionDistribution(const mat&, const rowvec&)’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:66:5: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   66 |     rf.Train(predictors, responses);
      |     ^~
      |     erf
In file included from mlpack-4.2.0/build/installdir/include/cereal/archives/binary.hpp:32,
                 from mlpack-4.2.0/build/installdir/include/mlpack/prereqs.hpp:17,
                 from mlpack-4.2.0/build/installdir/include/mlpack/core.hpp:35,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression/linear_regression.hpp:16,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression.hpp:15,
                 from sample.cpp:1:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp: In member function ‘void mlpack::RegressionDistribution::serialize(Archive&, uint32_t)’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:79:19: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   79 |     ar(CEREAL_NVP(rf));
      |                   ^~
mlpack-4.2.0/build/installdir/include/cereal/cereal.hpp:72:48: note: in definition of macro ‘CEREAL_NVP’
   72 |   #define CEREAL_NVP(T) ::cereal::make_nvp(#T, T)
      |                                                ^
In file included from mlpack-4.2.0/build/installdir/include/mlpack/core/dists/dists.hpp:20,
                 from mlpack-4.2.0/build/installdir/include/mlpack/core.hpp:50,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression/linear_regression.hpp:16,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression.hpp:15,
                 from sample.cpp:1:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp: In member function ‘const vec& mlpack::RegressionDistribution::Parameters() const’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:152:48: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
  152 |   const arma::vec& Parameters() const { return rf.Parameters(); }
      |                                                ^~
      |                                                erf
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp: In member function ‘size_t mlpack::RegressionDistribution::Dimensionality() const’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:155:42: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
  155 |   size_t Dimensionality() const { return rf.Parameters().n_elem; }
      |                                          ^~
      |                                          erf
In file included from mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution.hpp:162,
                 from mlpack-4.2.0/build/installdir/include/mlpack/core/dists/dists.hpp:20,
                 from mlpack-4.2.0/build/installdir/include/mlpack/core.hpp:50,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression/linear_regression.hpp:16,
                 from mlpack-4.2.0/build/installdir/include/mlpack/methods/linear_regression.hpp:15,
                 from sample.cpp:1:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp: In member function ‘void mlpack::RegressionDistribution::Train(const mat&)’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:28:3: error: ‘LinearRegression’ was not declared in this scope
   28 |   LinearRegression lr(observations.rows(1, observations.n_rows - 1),
      |   ^~~~~~~~~~~~~~~~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:30:3: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   30 |   rf = lr;
      |   ^~
      |   erf
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:30:8: error: ‘lr’ was not declared in this scope
   30 |   rf = lr;
      |        ^~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp: In member function ‘void mlpack::RegressionDistribution::Train(const mat&, const rowvec&)’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:50:3: error: ‘LinearRegression’ was not declared in this scope
   50 |   LinearRegression lr(observations.rows(1, observations.n_rows - 1),
      |   ^~~~~~~~~~~~~~~~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:52:3: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   52 |   rf = lr;
      |   ^~
      |   erf
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:52:8: error: ‘lr’ was not declared in this scope
   52 |   rf = lr;
      |        ^~
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp: In member function ‘double mlpack::RegressionDistribution::Probability(const vec&) const’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:67:3: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   67 |   rf.Predict(observation.rows(1, observation.n_rows-1), fitted);
      |   ^~
      |   erf
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp: In member function ‘void mlpack::RegressionDistribution::Predict(const mat&, arma::rowvec&) const’:
mlpack-4.2.0/build/installdir/include/mlpack/core/dists/regression_distribution_impl.hpp:82:3: error: ‘rf’ was not declared in this scope; did you mean ‘erf’?
   82 |   rf.Predict(points, predictions);
      |   ^~
      |   erf

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions