«неполный тип не допускается» при использовании структуры, определенной в заголовочном файле, в качестве параметра функции - PullRequest
2 голосов
/ 01 марта 2020

Я только что перешел с Python на C ++. Это практика, которую я сделал для struct. Всегда есть ошибка «неполный тип не разрешен», если я не использую напрямую структуру в исходном файле.

Я просмотрел много ответов при переполнении стека и попытался добавить typedef в заголовок или удалить структуру на std::vector<double> timesteps(struct temporal_info time), но ни один из них не работает.

Вот мой dmdbase.h

#ifndef dmdbase
#define dmdbase

#include <iostream>
#include <vector>

class DMDBase

{
public:
    struct temporal_info
    {
        double t0;
        int trend;
        double dt;
    };
    std::vector<double> timesteps(struct temporal_info time);
};
#endif

Вот мой dmdbase. cpp

using namespace std;


std::vector<double> timesteps(struct temporal_info time)
{
    std::vector<double> time_map;
    double final = time.trend + time.dt;
    for (double t = time.t0; t < final; t += time.dt)
    {
        time_map.push_back(t);
    }
    return time_map;
}

Ответы [ 3 ]

4 голосов
/ 01 марта 2020

Вам не нужно ключевое слово struct на сайте вызова функции, которое не является частью типа

std::vector<double> timesteps(temporal_info time);

Также: Проблема в том, что struct 'temporal_info' определена только внутри класса DMDBase. Так что вы должны сделать это

std::vector<double> DMDBase::timesteps(temporal_info time);
3 голосов
/ 01 марта 2020

В dmdbase.cpp убедитесь, что вы указали, что timesteps - это метод класса DMDBase. И удалите ключевое слово struct перед temporal_info, как оно уже упоминалось.

std::vector<double> DMDBase::timesteps(temporal_info time)
{
    ...
}

Акцент сделан на DMDBase::timesteps

0 голосов
/ 01 марта 2020

попробуйте

#include <iostream>
#include <vector>


typedef struct temporal_info temporal_info;

class DMDBase

{
public:
    struct temporal_info
    {
        double t0;
        int trend;
        double dt;
    };
    std::vector<double> timesteps(temporal_info time);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...