Проблема с многофайловым проектом в С++
Возникла проблема с многофайловым проектом, выдаёт ошибку. 
Что бы не пытался делать никак не получается от нее избавиться и сделать так, чтобы функция в основном файле заработала. Подскажите, пожалуйста, в чем загвоздка.
main.cpp :
#include <iostream>
#include <ctime>
using namespace std;
#define N 10
#include "qw.h"
int main() {
setlocale(LC_ALL, "ru");
zapoln(mm);
qa.cpp :
#include "qw.h"
#include <iostream>
void zapoln(mon mm[])
{
int ne;
double sqx;
for (ne = 0; ne < 3; ne++) {
printf("%d. Введите: название, школу, количество, площадь >",
ne + 1);
scanf_s("%s", mm[ne].name, sizeof(mm[ne].name));
if (!strcmp(mm[ne].name, "***")) break;
scanf_s("%f", &mm[ne].sc, sizeof(mm[ne].name));
scanf_s("%f", &mm[ne].cnt);
scanf_s("%lf", &sqx); mm[ne].sq = sqx;
}
}
qw.h :
#pragma once
#ifndef _QW_H_
#define _QW_H_
struct mon {
char name[35];
float sc;
float cnt;
double sq;
}mm[45];
void zapoln(mon mm[]);
#endif
Ответы (1 шт):
По-моему, вы не с того конца заходите. У вас вопрос "почему это машина не развивает 100 км/ч" - при том, что она не только не заводится, но ее вообще нет.
При компиляции вы должны были получить сообщение об ошибке
LNK1169: обнаружен многократно определенный символ - один или более
потому что переменная mm у вас определена в заголовочном файле, включенном в два .cpp-файла. И линковщик понятия не имеет, какую оставить :)
Варианты решений (если у вас и в самом деле С++, уж очень вы работаете в духе C - одно объявление переменной цикла вне его чего стоит...) -
Объявить mm как inline.
inline struct mon {
char name[35];
float sc;
float cnt;
double sq;
}mm[45];
Объявить mm как extern, и определить в файле .cpp
// qw.h
extern struct mon {
char name[35];
float sc;
float cnt;
double sq;
}mm[45];
// main.cpp
struct mon {
char name[35];
float sc;
float cnt;
double sq;
}mm[45];
Поступить, как принято - объявить в заголовочном файле тип, а переменную - в .cpp:
// qw.h
struct mon {
char name[35];
float sc;
float cnt;
double sq;
};
// main.cpp
mon mm[45];
Потом у вас возникнут другие вопросы, но это уж потом...