Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2009, 23:17   #1
potap88
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 16
По умолчанию нестыковка в проге С++...

всем хорошего дня вечера и утра!вот впервые не знаю что делать в своей программе, в общем я написал обьектно-ориентированую прогу, в которой описаны процедуры действия над векторами и матрицами. и проблема в обявлении глобальной перемены.дело в том, что эта переменная обьявлена в хидере вектор. эту константную переменную потом нужно использовать в хидере матрицы. пишем в хидере матрицы(matrix.h) эту строку #include "vect.h", после этого в класе матрица должно видеть эту переменную. но не видит!вот пример кода класа вектор и матрицы:
клас вектор:

Код:
include<stdio.h>
#include "MATRIX.h"  
static const int N=2000; // здесь мы обьявляем глобальную переменную
  struct  VECTOR {
  int array[N];
};
//procedure of VECTOR
VECTOR* ADD_VECTOR(VECTOR* A,VECTOR* B);
int MULTIPLE_VECTOR(VECTOR* D, VECTOR* C);
int MAX_INT(VECTOR* A);
void VECTOR_INPUT(VECTOR* A);
void  VECTOR_OUTPUT(VECTOR* A);
VECTOR* MULT_VECTOR_MATRIX(MATRIX* MA,VECTOR* V);// заметье, что здесь обьявлена процедура умножения матрицы на вектор, поэтому включение хидера матрицы необходимо для того чтобы обьяснить MATRIX* MA 

клас матрицы:
#include "vect.h"  //при подключении не должно быть вопросов чтотакое N
 struct MATRIX{
    int  matrix[N][N];
     };
//procedure of MATRIX
MATRIX* ADD_MATRIX(MATRIX* MA, MATRIX* MB);
MATRIX* SUB_MATRIX(MATRIX* MA, MATRIX* MB);
MATRIX* MULT_MATRIX(MATRIX* MA, MATRIX* MB);
int MAX_INT_MATRIX(MATRIX* MA);
MATRIX* INPUT_MATRIX();
теперь самое интересное. если убрать #include "MATRIX.h" в класе вектора, то не будет никаких ошибок! но в класе вектор описана процедура умножения матрицы на вектор, возвращаемый тип дожен быть вектор, поэтому эта процедура должна находится в класе вектоР! Как разрешить мне эту проблему???как сделать так чтобы компилятор не ругался на неизвестное N в класе матрица? Как это решить?

Последний раз редактировалось MaTBeu; 19.12.2009 в 13:31.
potap88 вне форума Ответить с цитированием
Старый 19.12.2009, 01:48   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Косячишь - спецификатор static делает переменную видимой только в текущем файле...убери статик и проверь...
Должно сработать, если нет - обратись в сторону спецификатора extren, хотя должно работать
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 19.12.2009, 13:23   #3
potap88
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 16
По умолчанию

и это тоже пробовал раньше. и в хидере матрица вбивал такую строку extern int N; все равно ошибка та же...
potap88 вне форума Ответить с цитированием
Старый 19.12.2009, 13:25   #4
potap88
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 16
По умолчанию

конечно, в голову приходила мысль создать отдельный хидер, где можно обьявить эту переменную, но это слишком просто. нужно код исправлять, а не убегать от ошибки
potap88 вне форума Ответить с цитированием
Старый 19.12.2009, 13:35   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Мда, код еще тот... У тебя перекресное подключение хидеров.
Решить твою проблему мужно двумя способами - говнокодом или дополнительным хедером. Можно еще перестроить классы по-нормальному, но я думаю, для тебя это не выход.
Способ первый (говнокодерский):
Комментируешь строку
Код:
static const int N=2000;
и везде, где встречается переменная N ставишь 2000. В обоих файлах.
Пример исправленного говнокода:
Код:
struct  VECTOR {
  int array[2000];
};
Способ второй (годный):
Ну сделать еще один хидер, в котором объявлять константы.
MaTBeu вне форума Ответить с цитированием
Старый 22.12.2009, 20:34   #6
potap88
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 16
По умолчанию

"Говнокодерский" не годится. потому что нам нужно изменять значение N только в одном месте, а не бегать по строкам и файлам. есть еще третий вариант: создать отдельную структуру, структуру матрицы, и не надо подключать тот(MATRIX.h), тогда будет все в порядке,и косяков в хидере не будет заметно. кстати, эта была работа с потоками в win32, только в качестве задач использовались вычисления матриц и векторов))
potap88 вне форума Ответить с цитированием
Старый 22.12.2009, 20:56   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

По-моему действительно лишне подключение файла matrix.h в vect.h. Зачем это делать? Все операции с матрицами, должны быть описаны там же где и объявление матрицы. Переместите вот эту ф-цию в файл matrix.h/cpp
Код:
VECTOR* MULT_VECTOR_MATRIX(MATRIX* MA,VECTOR* V);
и тогда не придётся подключать в vect.h matrix.h, что автоматом избавит от всех проблем
netrino вне форума Ответить с цитированием
Старый 27.12.2009, 19:54   #8
potap88
Пользователь
 
Регистрация: 18.12.2009
Сообщений: 16
По умолчанию

netrino это было первое, что я сделал, когда появилась такая проблема в моей работе. НО, увы, в другом сппшником будет ошибка: не найдена ссылка на этот метод. а возврат результата должен быть вектор. хоть убейте - не понимаю, почему эта процедура заметна в хидере вектор, и вопит, когда эту процедуру перемещаю в хидер матрица и подключаю vect.h в MATRIX.h
potap88 вне форума Ответить с цитированием
Старый 27.12.2009, 20:13   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А саму процедуру в Matrix.cpp перемещаете?
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нестыковка времени выполнения процедур \ функций postal2 Общие вопросы Delphi 12 20.08.2009 19:55
Не точности по проге Sasuke-sama Общие вопросы C/C++ 3 01.06.2009 19:51
Ошибка в проге :( Defender42 Помощь студентам 15 29.05.2009 02:08
музыка в проге beygul Помощь студентам 6 09.10.2008 13:27
Вопрос по проге Smorodinka Microsoft Office Excel 7 06.06.2008 23:10