简体   繁体   中英

visual c++ fstream error

first of all I'm a hardware programmer (HDL, uC programming) and was asked by my boss a couple of days ago to create an Interface in visual C++ to control a uC. I never used visual C++ before and my software programming skills are intermediate at best. However, I only have till Tuesday to get the interface to work, therefore I had to look for examples and do the same, due to the time frame I have. So please excuse me if I ask any obvious and stupid questions.

In my code, I have to move values stored in an array to a CSV file. So I have to separate my values using commas... However, in order to create a CSV file, I have to use fstream (as far as I understood from what I've read so far). Whenever I use

#include <fstream>

I get a huge amount of errors such as:

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(244): error C3083: 'vc_attributes': the symbol to the left of a '::' must be a type
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(244): error C2039: 'YesNoMaybe' : is not a member of '`global namespace''

Here is the rest of my code related to fstream:

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO::Ports;
#include <iostream>
#include <fstream>

      std::ofstream myfile;
            myfile.open("Data.txt");
            //find available ports
            private: void findports(void){
                         array<Object^>^ objectArray = SerialPort::GetPortNames();
                         this->comboBox4->Items->AddRange( objectArray );
                         array<String ^> ^ h = gcnew array<String ^>(24);
                         for(int i=0; i<=23; i++){
                             h[i]= String::Concat(i.ToString());
                         }
                         this->comboBox1->Items->AddRange( h );
                          array<String ^> ^ m = gcnew array<String ^>(60);
                         for(int i=0; i<=59; i++){
                             m[i]= String::Concat(i.ToString());
                         }
                         this->comboBox3->Items->AddRange( m );
                          array<String ^> ^ s = gcnew array<String ^>(24);
                         for(int i=0; i<=23; i++){
                             s[i]= String::Concat(i.ToString());
                         }
                         this->comboBox5->Items->AddRange( s );
                          array<String ^> ^ d = gcnew array<String ^>(366);
                         for(int i=0; i<=365; i++){
                             d[i]= String::Concat(i.ToString());
                         }
                         this->comboBox2->Items->AddRange( d);
                     }








        private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {
                 }
        private: System::Void label2_Click(System::Object^  sender, System::EventArgs^  e) {
                 }
    private: System::Void label4_Click(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void label5_Click(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void label6_Click(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

                 if((this->comboBox4->Text == String::Empty)||(this->textBox1->Text == String::Empty)||(this->textBox2->Text == String::Empty)){
                     this->textBox1->Text="missing port settings";
                     this->textBox2->Text="missing port settings";
                 }
                 else{ // start assigning
                     try{ // first make sure port isn't busy/open
                         if(!this->serialPort1->IsOpen){
                             // select the port whose name is in comboBox4 (select port)
                             this->serialPort1->PortName=this->comboBox4->Text;
                             //open the port
                             this->serialPort1->Open();


                             // sending
                             String^ name_ = this->serialPort1->PortName;
                             String^ sampling_period_ = this->comboBox5->Text;

                             String^ days_ = this->comboBox2->Text;

                             String^ hours_ = this->comboBox3->Text;

                             String^ minutes_ = this->comboBox1->Text;

                             String^ start_ = this->textBox1->Text;

                             String^ end_ = this->textBox2->Text;

                             //send data to setup timer on the microcontroller
                             this->serialPort1->WriteLine(sampling_period_);
                             this->serialPort1->WriteLine(days_);
                             this->serialPort1->WriteLine(hours_);
                             this->serialPort1->WriteLine(minutes_);
                             // send slave addresses
                             this->serialPort1->WriteLine(start_);
                             this->serialPort1->WriteLine(end_);


                             // receiving
                             int rec[100][8];
                             for (int i=0;i<sizeof(rec[0]);i++){
                                 for (int j=0;j<sizeof(rec);j++){
                                     rec[i][j]=int::Parse(this->serialPort1->ReadLine());
                                 }
                             }
                             myfile<<"ADC1"<<","<<"ADC2"<<","<<"ADC3"<<","<<"ADC4"<<","<<"ADC5"<<","<<"ADC6"<<","<<"ADC7"<<","<<"ADC8"<<endl;
                             for (int i=0;i<sizeof(rec[0]);i++){
                                 for (int j=0;j<sizeof(rec);j++){
                                     myfile<<rec[i][j]<<",";
                                 }
                                 myfile<<endl;
                             }



                         }
                         else{
                             this->textBox1->Text="Warning: port is busy or isn't open";
                             this->textBox2->Text="Warning: port is busy or isn't open";
                         }
                     }
                        catch(UnauthorizedAccessException^){
                            this->textBox1->Text="Unauthorized access";
                            this->textBox2->Text="Unauthorized access";
                        }
                     }

             }
    private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void label7_Click(System::Object^  sender, System::EventArgs^  e) {
             }
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

             }
    private: System::Void label8_Click(System::Object^  sender, System::EventArgs^  e) {
             }
    };
    }

I hope to get some help or at least any useful information in here.

Thanks in advance.

#include <fstream>
std::ofstream myfile;
    myfile.open("Data.txt");

That last line is a statement, which can only occur inside a function, not at namespace scope (ie outside any function body) as you've written it.

44): error C3083: 'vc_attributes': the symbol to the left of a '::' must be a type
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(244): error C2039: 'YesNoMaybe' : is not a member of '`global namespace''

This error cannot possibly come from the code you showed, which doesn't mention vc_attribtues or YesNoMaybe . You'll get better answers if you simplify your code to the minimum necessary to show the problem, and post the error that matches the code.

I'm not sure what you expect to get from sizeof(rec) but it's probably not what you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM