2012-11-11 98 views
0

首先,我是硬件編程人員(HDL,uC編程),幾天前我的老闆問我在Visual C++中創建了一個用於控制uC的接口。我以前從未使用過Visual C++,而且我的軟件編程技能最好是中級。但是,我只有到週二才能使界面工作,因此我不得不尋找示例,並根據我的時間框架執行相同的操作。所以請原諒我,如果我問任何明顯和愚蠢的問題。visual C++ fstream error

在我的代碼中,我必須將存儲在數組中的值移動到CSV文件中。所以我必須使用逗號分隔我的值... 但是,爲了創建一個CSV文件,我必須使用fstream(據我所知,迄今爲止我已經瞭解)。 每當我使用

#include <fstream> 

我得到一個巨大的錯誤,如量:

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'' 

這裏是我的代碼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) { 
      } 
    }; 
    } 

我希望能得到一些幫助或至少在這裏有用的信息。

在此先感謝。

+3

錯誤消息看起來不像他們與這裏提供的代碼有任何關係。請張貼真實的代碼,這是你能想出的最短的代碼,可以證明問題。 –

+0

你沒有顯示出足夠的數據......你能發佈更多的代碼嗎?特別是你自己的任何包括。如果你在內置的頭文件中出錯,這可能意味着你自己缺少一個分號,或者沒有用相應的'#endif'關閉一個打開的'#if ????'子句。 – paddy

+0

請勿多發表。帖子不同。 –

回答

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

最後一行是一個語句,它只能出現在函數內部,而不是在命名空間內(即任何函數體外),爲你寫它。

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'' 

此錯誤不可能來自你顯示的代碼,其中沒有提到vc_attribtuesYesNoMaybe。如果您將代碼簡化到顯示問題所需的最低限度,併發布與代碼匹配的錯誤,您將得到更好的答案。

我不確定你期望從sizeof(rec)得到什麼,但它可能不是你想要的。

+0

感謝您的快速回復。我將通過添加更多關於代碼的方式編輯我的第一篇文章。 –

+0

好點...它看起來好像'#include'可能在函數內部,或者代碼的其餘部分 – paddy

+0

@ user1816731:SO是一個問答 - 好像你在聊天室裏會更好一些,試試IRC! –