Błąd LNK2019 w funkcji main() [c++]

0

Witam,
mam następujący problem mój program składa się z jednego pliku nagłówkowego (jest w nim przestrzeń nazw + prototypy funkcji), pliku, gdzie są definicje funkcji oraz pliku zawierającego funkcję main(), które ma w sobie wywołania funkcji itp.

No i wyskakuje następujący błąd:
"1>name_s.obj : error LNK2019: unresolved external symbol "void __cdecl SALES::showSales(struct SALES::Sales const &)" (?showSales@SALES@@YAXABUSales@1@@Z) referenced in function _main
1>name_s.obj : error LNK2019: unresolved external symbol "void __cdecl SALES::setSales(struct SALES::Sales &,double const * const,int)" (?setSales@SALES@@YAXAAUSales@1@QBNH@Z) referenced in function _main
1>name_s.obj : error LNK2019: unresolved external symbol "void __cdecl SALES::setSales(struct SALES::Sales &)" (?setSales@SALES@@YAXAAUSales@1@@Z) referenced in function _main"

Problem dotyczy funkcji main() - tyle co wiem i każdy wie. IDE to Visual Studio C++ Express 2010, wszystkie pliki są połączone w jeden projekt, nie ma nigdzie błędnych nazw funkcji, wszystkie funkcje są zdefiniowane. Program to ConsoleApplication, wszystkie funkcje napisane są przeze mnie. Szukałem po internecie sposobu na rozwiązanie - niektórzy pisali, by w ustawieniach projektu w linkerze zmienić wartość system na console ale ona taka była, żadne inne kombinowanie nie działało.

Jakby co to mogę podać również kod.

Pozdrawiam

0

Albo te funkcje nie są nigdzie zdefiniowane (kompilator C++ potrafi takie coś przepuścić, wywalając się dopiero na linkerze), albo plik .cpp w którym one są nie jest wlinkowywany. W takiej sytuacji usuń go z projektu (uważaj by fizycznie pliku nie skasować) i dodaj na nowo.

0

nic niestety nie pomaga :(

0

może funkcje w pliku .h i .cpp się nie zgadzają, np. różnią jakąś pierdołą. pokaż te funkcje.

0

Oto cały kod:

//plik nagłówkowy - sales.h
#ifndef SALES_H_
#define SALES_H_

namespace SALES
{
	const int QUARTES = 4;
	struct Sales
	{
		double sales[QUARTES];
		double average;
		double max;
		double min;
	};

void setSales(Sales & s);
void setSales(Sales & s, const double ar[], int n);
void showSales(const Sales & s);

}

#endif  
//functions.cpp 
#include "stdafx.h"
#include <iostream>
#include "sales.h"

using namespace SALES;

void setSales(Sales & s) 
{
	double max, ave, min;
	for(int i = 0; i < QUARTES; i++) 
	{
		std::cout << "Podaj sprzedaz za " << i+1 << " kwartal:\n";
		while(!(std::cin >> s.sales[i]))
		{
			std::cin.clear();
			std::cout << "Podaj wartosc numercyzna!\n";
			std::cin >> s.sales[i];
			while(std::cin.get() !='\n')
				continue;
		} 
		
	}
	ave = 0;
	for(int i = 0; i < QUARTES;i++)
		ave += s.sales[i]; 
	ave /= QUARTES; 
	min = max = s.sales[0]; 
	for(int i = 0; i < QUARTES;i++)
	{
		if(max < s.sales[i]) 
			max = s.sales[i]; 
		else if(min > s.sales[i])
			min = s.sales[i];
	}
	s.max = max; 
	s.min = min;
	s.average = ave;
}

void setSales(Sales & s, const double ar[], int n) 
{
	s.max = s.min = ar[0]; 
	for(int i = 0; i < n && i < QUARTES ;i++) 
	{
		s.sales[i] = ar[i]; 
	}
	if(n < QUARTES) 
	{
		int temp = QUARTES - n; 
		for(int i = temp; temp < QUARTES; i++) 
			s.sales[i] = 0;
	}
	for(int i = 0; i < n;i++)
	{
		if(s.max < ar[i]) 
			s.max = ar[i]; 
		else if(s.min > ar[i]) 
			s.min = ar[i]; 
	}
	for(int i = 0; i < n;i++)
		s.average += ar[i];
	s.average /= n; 
}

void showSales(const Sales & s) 
{
	std::cout << "Informacje o sprzedazy:\n";
	std::cout << "Dane o sprzedazy z calego roku (dzielone na kwartaly):\n";
	for(int i = 0; i < 4; i++)
	{
		std::cout << "Sprzedaz za " << i+1 << " kwartal:\n";
		std::cout << s.sales[i] << std::endl;
	}
	std::cout << "Srednia wartosc wszytskich sprzedazy kwartalnych:\n";
	std::cout << s.average << std::endl;
	std::cout << "Maksymalna wartosc wszytskich sprzedazy kwartalnych:\n";
	std::cout << s.max << std::endl;
	std::cout << "Minimalna wartosc wszytskich sprzedazy kwartalnych:\n";
	std::cout << s.min << std::endl;
}
// names_s.cpp - plik z funkcją main()
#include "stdafx.h"
#include <iostream>
#include "sales.h"
using namespace SALES;


int main()
{
	int n = 2;
	double * tab = new double[n];
	tab[0] = 2000.55;
	tab[1] = 2100.99;

	Sales interactive, stative;
	setSales(interactive);
	setSales(stative, tab, n);
	std::cout << "Interaktywna funckja:\n";
	showSales(interactive);
	std::cout << "\nNieinteraktywna funckja:\n";
	showSales(stative);
	std::cout << "\nKoniec programu!\n";
	system("pause");
	return 0;
}
0

A jak w pliku z definicjami dodasz przed nazwą funkcji namespace, tzn np.

void SALES::setSales(Sales & s) 

?

0

dzięki! działa ;) ale czy w takim razie zawsze podczas występowania takiego problemu muszę dodać SALES:: przed nazwą funkcji, czy można to jakoś zmienić ?

0

zapis using namespace SALES; oznacza „użyj przestrzeni SALES podczas wyszukiwania nazw”, a nie „zatop wszystkie funkcje w przestrzeni SALES”. ten drugi efekt uzyskasz robiąc tak jak w nagłówku, czyli za pomocą namespace SALES { }

0

wielkie dzięki za info ;) oraz za całe rozwiązanie problemu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1