Mam program podzielony na 3 pliki 1 - deklaracja struktury i prototypy funkcji, 2 definicje funkcji, 3 - funkcja main.
Struktura nazywa się Sales. Nie wiem jaki kod napisać by przesłać dane do funkcji setSales(Sales & s, const double ar[], int n);
jak mógłby wyglądać kod?
_alex
([alex])
23 Luty 2010 18:49
#2
Na pewno musi być:
struct Sales { … };
reszta może być na setki innych sposobów.
ale nie wiem jak napisać definicje w funkcji main bo strukturę mam i definicję tej funkcji. Osobno umiem przesyłać do funkcji i strukturę i tablicę ale nie razem.
_alex
([alex])
23 Luty 2010 19:05
#4
Niczym się nie różni jak przesyłasz osobno tak samo przesyłasz razem.
Na ile rozumiem definicje funkcji musisz mieć w osobnym pliku, więc o jaką “definicje w funkcji main” ci chodzi?
o to, że jak napiszę kod typu:
Sales sales1;
const int MAX = 4;
double arr[MAX] = { zmienne_double};
setSales(sales1, arr[], MAX); // nie działa próbowałem zmieniać inaczej deklarować, nic.
Quentin
(Quentin)
23 Luty 2010 19:23
#6
Nic dziwnego - co to za zapis arr[] :?: Tablicę przesyłasz podając adres elementu (najczęściej początkowego):
setSales(sales1, arr, MAX); //nazwa tablicy jest równocześnie adresem zerowego jej elementusetSales(sales1, arr[0], MAX); //adres 0-elementusetSales(sales1, arr[3], MAX); //adres 3-elementu
Zapis z pustymi nawiasami kwadratowymi [b][][/b] może wystąpić tylko na liście argumentów formalnych.
Też nie działa failed:
unresolved external symbol “void __cdecl SALES::setSales(struct SALES::Sales &,double const * const,int)” (?setSales@SALES@@YAXAAUSales @1@QBNH@Z) referenced in function _main
Quentin
(Quentin)
23 Luty 2010 19:42
#8
To jest już błąd linkera.
1-szy plik, ten ze strukturą i z deklaracjami powinien mieć rozszerzenie *.h . Jego włączasz dyrektywą
#include "Naglowek.h" [/code]
Do tych dwóch pozostałych plików. To są podstawy…
Wszystko jest dobrze jeśli sobie np zapiszę deklaracje tablicy, struktury i skompiluje, problem zaczyna się gdy wywołuję funkcje.
– Dodane 23.02.2010 (Wt) 20:51 –
zapomniałem napisać, że struktura jest w przestrzeni nazw SALES, gdy usunę przestrzeń nazw to działają te wywołania. Co może być nie tak? skoro kiedy nie wywołuje funkcji z main to działa przestrzeń nazw SALES idealnie?
Quentin
(Quentin)
23 Luty 2010 20:02
#10
Przestrzeń nazw zawsze “działa idealnie” (ona mieści w sobie po prostu jakieś nazwy - trudno żeby to nie działało ^.^). Ty po prostu czasem nie wzbogacasz nazw z tej przestrzeni o nazwę tej przestrzeni. Przykładowo:
namespace SALES{ struct strukt{ //... };
Znaczy udostępniłem tak:
#include
#include “Sales1.h”
using namespace SALES;
i myślałem, że pójdzie ale nie poszło.
Quentin
(Quentin)
23 Luty 2010 20:04
#12
Wrzuć w takim razie kod wszystkich 3-ech plików bo nie chce mi się zakładać co możesz robić źle.
Quentin
(Quentin)
23 Luty 2010 20:11
#14
Słowo kluczowe jest takie jak powinno być - czyli struct
Sales1.h
#ifndef SALES_H_
#define SALES_H_
namespace SALES
{
const int QUARTERS = 4;
struct Sales
{
double sales[QUARTERS];
double average;
double max;
double min;
};
void setSales(Sales & s, const double ar[], int n);
void setSales(Sales & s);
void showSales(const Sales & s);
}
#endif
plik drugi Sales1.cpp
#include
#include "Sales1.h"
using namespace SALES;
void setSales(Sales & s, const double ar[], int n)
{
s.average = ar[0];
for (int i = 0; i < n - 1; i++)
{
if (ar[i] > ar[i + 1])
s.max = ar[i];
else
s.max = ar[i + 1];
if (ar[i] < ar[i + 1])
s.min = ar[i];
else
s.min = ar[i + 1];
s.average = ar[i + 1];
}
}
plik main.cpp
#include
#include "Sales1.h"
using namespace SALES;
const int MAX = 4;
int main()
{
Sales sales1;
double tab[MAX];
setSales(sales1, tab, MAX);
std::cin.get();
return 0;
}
Quentin
(Quentin)
23 Luty 2010 20:34
#16
Funkcję musisz zdefiniować z uwzględnieniem nazwy przestrzeni nazw:
void SALES::setSales(Sales & s, const double ar[], int n)
Wszystko działa, taki mały błąd a spędziłem dwa dni nad nim i nic. Dziękuję za pomoc. ;d
– Dodane 24.02.2010 (Śr) 23:11 –
Dlaczego gdy chcę wypisać tablicę w osobnej funkcji to wyświetlają się jakieś bzdury?
#include
#include "Sales1.h"
using namespace SALES;
void SALES::setSales(Sales & s, const double ar[], int n)
{
using std::cout;
s.max = 0;
s.min = ar[0];
s.average = 0;
for (int i = 0; i < n; i++)
{
if (s.max < ar[i])
s.max = ar[i];
if (s.min > ar[i])
s.min = ar[i];
s.average += ar[i];
}
s.average /= n;
}
void SALES::setSales(Sales & s)
{
using std::cin;
using std::cout;
cout << "Podaj informacje dla 4 kwartalow:\n";
int i;
for (i = 0; i < QUARTERS; i++)
cin >> s.sales[i];
}
void SALES::showSales(const Sales & s)
{
using std::cout;
cout << "Tablica: ";
for(int i = 0; i < QUARTERS; i++)
cout << std::endl << s.sales[i];
cout << "\nMinimum: " << s.min;
cout << "\nMaksimum: " << s.max;
cout << "\nSrednia: " << s.average;
}
#include
#include "Sales1.h"
using namespace SALES;
int main()
{
const int MAX = 4;
Sales sales1;
double arr[MAX] = { 23.5, 34.2, 123.7, 12.9 };
//sales1.sales[0] = arr[0];
SALES::setSales(sales1, arr, MAX);
showSales(sales1);
for (int i = 0; i < MAX; i++)
sales1.sales[i] = arr[i];
std::cin.get();
return 0;
}