2013-12-21 69 views
2

我想用C++讀取文件的內容。即時通訊使用ifstream的,但這裏有一個錯誤在編譯:C++ ifstream類型錯誤

代碼:

#include <Python.h> 
#include <iostream> 
#include <fstream> 

using namespace std; 

ifstream script; 
script.open("main.py"); 
const char *programm; 
if (script.is_open()) { 
    while (!script.eof()) { 
     script >> programm; 
    } 
} 
script.close(); 

和錯誤:

main.cpp:8:1: error: 'script' does not name a type 
script.open("main.py"); 
^ 
main.cpp:10:1: error: expected unqualified-id before 'if' 
if (script.is_open()) { 
^ 

我希望你能幫助我,謝謝!

+2

你需要把你的操作放到一個函數中! – billz

+0

CAn你顯示代碼我必須做什麼?即時通訊不是專業人士,所以我不知道你的意思是什麼 – Tekkzz

+0

你的主要功能在哪裏? –

回答

3
#include <Python.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main(){ 

    ifstream script; 
    script.open("main.py"); 
    // const char *programm; // You don't need a C string unless you have a reason. 
    string programm; 
    if (script.is_open()) { 
     while (!script.eof()) { 
      string line; 
      script >> line; 
      line += '\n'; 
      programm += line; 
     } 
    } 
    script.close(); 
    // Now do your task with programm; 
return 0; 
} 
+0

如何將字符串轉換爲char? – Tekkzz

+0

哦!沒有注意到:)你不能寫入輸入流。操作符流操作符也不適用於數組。 –

+1

剛編輯我的答案。希望這一個幫助。 –

2

有幾個問題。主要的(導致錯誤)是在C++中,你不能只讓代碼自己生存。這一切都進入功能。特別是,您必須具有main函數。

此外,您的閱讀循環不會正常工作。您應該閱讀std::string,這將記錄您的記憶,以及您將錯過最後一個字符串的當前方式。我建議一次讀一行。就像這樣:

#include <Python.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

int main() 
{ 
    std::ifstream script ("main.py"); 
    std::string line; 
    if (!script) // Check the state of the file 
    { 
     std::cerr << "Couldn't open file\n"; 
     return 1; 
    } 
    while (std::getline(script, line)) // Read a line at a time. 
     // This also checks the state of script after the read. 
    { 
     // Do something with line 
    } 
    return 0; // File gets closed automatically at the end 
} 
+0

如何讀取所有行並將其打包到字符串變量? – Tekkzz

+0

你想整個文件在一個字符串?這有點奇怪。你可以有另一個名爲'file'的字符串,並在循環內部執行'file.push_back(line);'。但這不是一個好主意。大概有一些接口可以在你的程序中執行python腳本。你不能通過傳遞文件名來做到這一點嗎? – BoBTFish

+0

請邀請我參加聊天 – Tekkzz