Функция C ++ Struct в другом заголовке выдает «отсутствующий спецификатор типа»

Я получил в моем «main.cpp» следующий код:

#include "rational.h"
using namespace std;

typedef struct rational {
long long numerator;
long long denominator;
} rational_t;

И у меня есть заголовочный файл namend «рациональный.h»:

#pragma oncerational add(rational  a,rational b)
{
rational c;
c.numerator = a.numerator + b.numerator;
c.denominator = a.denominator + b.denominator;
return c;
}

Я получил ошибку на линии:

rational add(rational  a,rational b)

Это дает мне следующий код ошибки:
Fehler C4430 Fehlender Typspezifizierer — интригующий странник. Hinweis: «default-int», странный фон C ++, но не unterstützt.
Перевод:
Ошибка C4430 Указатель отсутствующего типа — int принят. «default-int» не поддерживается C ++.

Я думаю, потому что функция не определяет мою структуру должным образом. Может кто-нибудь, пожалуйста, помогите мне?

Привет,
Nike

0

Решение

Вы не вставили свой полный исходный код в main.cpp и рациональный.h, так что это делает его немного сложнее для правильной отладки. Основываясь только на том, что вы дали:

  1. Ваша структура была названа «рациональной», но вы использовали typedef и определили его как новый тип или другой способ объявления «структурной рациональной», называемой рациональной_т. Ваша функция должна вернуть рациональный_т и принять рациональный_т для обоих параметров.

  2. Вы, вероятно, хотели поместить структуру рациональных в рациональный.h, перед объявлением вашей функции.

Довольно сложно определить, хотите ли вы использовать C ++ или C из этого примера кода, поэтому я написал это на C. Это будет началом для вас.

main.c

#include <stdlib.h>
#include <stdio.h>

#include "rational.h"
int main()
{
rational_t first;
rational_t second;

first.numerator = 5;
first.denominator = 7;

second.numerator = 3;
second.denominator = 9;

rational_t product = add(first, second);
printf("%lld / %lld\n", product.numerator, product.denominator);

return 0;
}

rational.h

#ifndef RATIONAL_H_
#define RATIONAL_H_

typedef struct rational {
long long numerator;
long long denominator;
} rational_t;

rational add(rational  a,rational b)
{
rational c;
c.numerator = a.numerator + b.numerator;
c.denominator = a.denominator + b.denominator;
return c;
}

#endif // RATIONAL_H_
1

Другие решения

Ваш rational.h заголовок не может видеть определение rational но пытается использовать это.

Переехать typedef struct rational… к вершине rational.h и заменить декларацией в main.cpp:

#include "rational.h"
using namespace std;

rational rational_t;
0

По вопросам рекламы [email protected]