4 svar
65 visningar
Schwartz 42
Postad: 12 feb 13:33

Filhantering visual studio 2022

När jag håller på och ska lägga mina funktionsdefinationer i en egen cpp fil för att sedan inkludera dessa i till min main cpp fil får jag inte riktigt till det. För att det ska gå o köra programmet i main cpp filen måste jag ha #include <iostream samt using namespace std i cpp filen med funktioner. Det här ska man inte behöva enl läroboken, men jag får det inte att fungera om jag tar bort dessa rader i cpp filen med funktionerna. Vad gör jag för fel? Använder Visual Studio 2022.

//Koden i main cpp filen.

#include <iostream>
#include "funktion.h"
#include <ctype.h>
using namespace std;

int main()
{


	char menyval;
	while (true)
	{
		cout << "Gor ett val:\n";
		cout << "[K]ontrollera vadret\n";
		cout << "[S]kriv ut en talfoljd\n";
		cout << "[A]ddera()\n";
		cout << "[M]yndig\n";
		cout << "[Q]uit\n";
		cin >> menyval;
		menyval = toupper(menyval);
		switch (menyval)
		{
		case'K':
			Vader();
			cout << endl;
			break;
			case 'S':
			Talfoljd();
			cout << endl;
			break;
		case 'A':
			Addera1();
			cout << endl;
			break;
		case 'M':
			Myndig1();
			cout << endl;
			break;
		case 'Q':
			return 0;
		default:
			cout << "Ogiltigt val, forsok igen.\n";
		}
	}
}

//Koden i h filen:

void Vader();
void Talfoljd();
void Addera1();
int Addera2(int tal1, int tal2);
bool Myndig(int alder);
void Myndig1();

/*Koden i funktions cpp filen, här ska man enl boken inte behöva
#include <iostream> och using namespace std;. Tar jag bort det går det inte köra programmet i main cpp.*/

#include <iostream>
using namespace std;
void Vader()
{
	cout << " Ar det fint vader ute? j/n ";
	char svar;
	cin >> svar;
	if (svar == 'j' || svar == 'J')
	{
		cout << "vi gar pa picknick";
	}
	else if (svar == 'n' || svar == 'N')
	{
		cout << "Vi stannar inne och laser en bok istallet";
	}
	else
	{
		cout << "Jag forstar inte";
	}
}
void Talfoljd()
{
	int Nr = 0;
	while (Nr < 20)
	{
		Nr++;
		cout << "Nr" << Nr << endl;
	}
}

int Addera2(int tal1, int tal2)
{
	int summa = tal1 + tal2;
	return summa;
}

void Addera1()
{
	
	int tal1, tal2;
	cout << "Ange ett tal:\n";
	cin >> tal1;
	cout << "Ange ett tal till:\n";
	cin >> tal2;
	cout  <<Addera2(tal1, tal2);
}

bool Myndig(int alder)
{
	if (alder >= 18)
	{
		return true;
	}
	else
	{
		return false;
	}
}
void Myndig1()
{
	int age;
	cout << "Ange din alder:\n";
	cin >> age;
	if (Myndig(age) == true)
	{
		cout << "Du ar myndig\n";
	}
	else if (Myndig(age) == false)
	{
		cout << "Du ar omyndig\n";
	}
}
Laguna Online 30713
Postad: 12 feb 14:16

Hur blir det om du flyttar upp namespace-raden i main så den kommer före include function.h?

Schwartz 42
Postad: 12 feb 14:24
Laguna skrev:

Hur blir det om du flyttar upp namespace-raden i main så den kommer före include function.h?

Ingen skillnad tyvärr :(

anders_k 237
Postad: 13 feb 17:56 Redigerad: 13 feb 18:00

Du behöver ha #include<iostream> i din funktion.cpp eftersom du använder cout och cin i den och den byggs separat.  Varje .cpp fil byggs separat efter det att headers har lyfts in. Det är också en bra vana att inte använda using namespace std och istället skriva ut std::cout osv, inte just i detta exempel men sen när du jobbar på större projekt med många namespace. Du kan även stoppa in using namespace std i en funktion om du vill, som jag gjorde nedan.

// main.cpp
#include <iostream>
#include <cctype>
#include "funktion.h"

int main()
{
  using namespace std;
  char menyval;
  while (true)
  {
    cout << "Gor ett val:\n";
    cout << "[K]ontrollera vadret\n";
    cout << "[S]kriv ut en talfoljd\n";
    cout << "[A]ddera()\n";
    cout << "[M]yndig\n";
    cout << "[Q]uit\n";
    cin >> menyval;
    menyval = toupper(menyval);
    switch (menyval)
    {
    case'K':
      Vader();
      cout << endl;
      break;
      case 'S':
      Talfoljd();
      cout << endl;
      break;
    case 'A':
      Addera1();
      cout << endl;
      break;
    case 'M':
      Myndig1();
      cout << endl;
      break;
    case 'Q':
      return 0;
    default:
      cout << "Ogiltigt val, forsok igen.\n";
    }
  }
}

// funktion.h
void Vader();
void Talfoljd();
void Addera1();
int Addera2(int tal1, int tal2);
bool Myndig(int alder);
void Myndig1();

// funktion.cpp
// du behöver iostream eftersom du använder cout och cin i funktion.cpp

#include <iostream> 
using namespace std;
void Vader()
{
  cout << " Ar det fint vader ute? j/n ";
  char svar;
  cin >> svar;
  if (svar == 'j' || svar == 'J')
  {
    cout << "vi gar pa picknick";
  }
  else if (svar == 'n' || svar == 'N')
  {
    cout << "Vi stannar inne och laser en bok istallet";
  }
  else
  {
    cout << "Jag forstar inte";
  }
}
void Talfoljd()
{
  int Nr = 0;
  while (Nr < 20)
  {
    Nr++;
    cout << "Nr" << Nr << endl;
  }
}

int Addera2(int tal1, int tal2)
{
  int summa = tal1 + tal2;
  return summa;
}

void Addera1()
{
  int tal1, tal2;
  cout << "Ange ett tal:\n";
  cin >> tal1;
  cout << "Ange ett tal till:\n";
  cin >> tal2;
  cout  <<Addera2(tal1, tal2);
}

bool Myndig(int alder)
{
  if (alder >= 18)
  {
    return true;
  }
  else
  {
    return false;
  }
}
void Myndig1()
{
  int age;
  cout << "Ange din alder:\n";
  cin >> age;
  if (Myndig(age) == true)
  {
    cout << "Du ar myndig\n";
  }
  else if (Myndig(age) == false)
  {
    cout << "Du ar omyndig\n";
  }
}
Schwartz 42
Postad: 13 feb 19:31

Tack snälla för svar, då förstår jag bättre! 

Svara
Close