VS 2013 Update 3 - Compiler Error C2797

0

Witam!
Błąd kompilacji pojawił się w moim kodzie po aktualizacji Update 3 do Visual Studio 2013 Express for Desktop. Problem ten jest znany, a sugerowane rozwiązanie przez Microsoft znajduje się tutaj. Chodzi o listę inicjalizującą konstruktora, nie wiem jak rozwiązać ten problem na poniższym przykładzie.

main.cpp

#include <iostream>
#include <string>
#include <conio.h>
#include "header.h"

using namespace std;

int main()
{	
	Example_2 Example_A;
	Example_A.View_Content();

	Example_2 Example_B{ };
	Example_B.View_Content();

	Example_2 Example_C{ 2, 4, "Example" };
	Example_C.View_Content();
	 
	_getch();
	return 0;
} 

header.h

#pragma once

using namespace std;

class Example_2
{
	private:
		int x;
		int y;
		string z;

	public:
		Example_2() 
			: x{}, y{}, z{}
		{ }

		Example_2(int _x, int _y, string _z) 
			: x{ _x }, y{ _y }, z{ _z }
		{ } // COMPILER ERROR C2797

		void View_Content()
		{
			cout << "x = " << this->x << endl;
			cout << "y = " << this->y << endl;
			cout << "z = " << this->z << endl;
			cout << endl;
		}
};

Będę wdzięczny za odpowiedź.
Pozdrawiam!

1

Błąd kompilacji pojawił się w moim kodzie po aktualizacji Update 3 do Visual Studio 2013 Express for Desktop.

I dobrze że się pojawił, bo przed Update 3 kompilator generował po prostu źle działający kod.
Więc problem istniał cały czas, tylko dopiero teraz masz błąd „not implemented”.

daj okrągłe nawiasy:

 : x(_x), y(_y), z(_z)
0

Działa. Wielkie dzięki!
Czyli kurs na Microsoft Virtual Academy "C++: A General Purpose Language and Library Jump Start" jest już w pewnym stopniu nieaktualny. To właśnie z tego kursu wziąłem sposób definicji listy inicjalizującej konstruktora, poprzez nawiasy klamrowe, a nie przez okrągłe, tak jak w "klasycznym" C++.
Jeszcze raz dziękuję i pozdrawiam :)

0

Użycie klamer w liście inicjalizacyjnej pojawiło się w VS2013 RTM, ale okazało się że generuje zły kod wynikowy w niektórych przypadkach (np. dla vector<int>). MS stwierdził że tego nie da się naprawić w update'cie (bo trzeba przepisać kawał kompilatora na nowo), więc wyciął ficzera w Update 3 jako “not yet implemented”.
W przyszłym wydaniu Visuala klamry już będą działać prawidłowo.

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