2010-12-31 8 views
0

Основанный как на том, когда языки были изобретены, так и на структуре языков, этот переход, вероятно, должен идти другим путем, но я достаточно уверен в своих способностях Java или, по крайней мере, я хорош достаточно на это .. но я пытаюсь теперь перейти на C++, и у меня возникают трудности.Переход от java к C++

В java чтение текстового файла может быть выполнено путем объявления нового файлового объекта, а затем сканера (или какого-либо подобного класса) для его чтения или классов читателя (буферизованного считывателя, считывателя входного потока, файла читатель ... список вариантов продолжается) Но теперь я пытаюсь сделать это на C++, очень простой функции программы, и мой код не работает. Код, который у меня есть:

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    ofstream myfile; 
    myfile.open ("example.txt"); 
    myfile << "This text appears in the file.\n"; 
    myfile.close(); 
    return 0; 
} 

Что я забыл? Мне кажется полным, но опять же, я почти не знаю C++ ...

+5

Во-первых, вы не должны пытаться преобразовать свои знания Java в C++. Вы только массово запутаете себя и произведете очень плохой код. Вы должны начать с абсолютной основы с хорошей вступительной книги C++. – Falmarri

+5

Этот код отлично работает на моей платформе (Linux/g ++). Обратите внимание, что 'open' не требуется, потому что вы можете построить' ofstream' из имени файла, а 'close' не требуется, потому что деструктор закроет файл. –

+0

В дополнение к тому, что сказал Фалмарри, единственным способом, которым могут помочь ваши знания java, является выявление проблем, решаемых на обоих языках, - и затем их сравнение, как для сходства, так и для различий. – KevinDTimm

ответ

4

Этот код верен. Вы уверены, что файл example.txt не создается? Например, если вы используете визуальную студию, то она не будет находиться в папках Debug или Release, но будет отображаться на одном уровне, так как это будет рабочий каталог по умолчанию.

-3

Java-багаж является обязательством, а не активом. Мышление в C++ вы бы сделать этот код проще и безопаснее:

#include <fstream> 

int main() { 
    std::ofstream myfile("example.txt"); 
    myfile << "This text appears in the file.\n"; 
    return 0; // you can skip this too 
} 

Или еще короче:

#include <fstream> 

int main() { std::ofstream("example.txt") << "This text appears in the file.\n";} 
+1

-1 для «еще короче». Это не питон. – Falmarri

+0

Второй пример не работает. Он создает файл, содержащий строковое представление адреса (например, «0x100000dd8»). – StackedCrooked

+0

@StackedCrooked, вы правы! Это интересный пример, я сомневаюсь, что эти «-» клики действительно поняли. Причина, по которой вы видите напечатанный адрес, состоит в том, что basic_ostream имеет оператор-член << (const void *), который был сопоставлен. Оператор <<, который принимает const char *, не является членом, и по какой-то неизвестной причине он принимает ссылку l-value, вместо идеальной пересылки они имели бы ссылку на r-значение. Таким образом, увы, r-значения не принимаются без уважительной причины, и это единственная причина, по которой более короткий пример не печатает текст. –

0

Я полагаю, ваш реальный вопрос заключается в том, чтобы узнать C++, когда уже знакомы с Java. Для этого я бы рекомендовал книгу Accelarated C++. Это очень хорошее введение в C++. Однако он плотный и потребует некоторого изучения. Мне потребовалось около двух месяцев, чтобы работать.

Если у вас нет времени или мотивации для этого, вы можете начать с Effective C++. Это в основном сборник do's и don'ts, который поможет вам избежать общих ошибок начинающих.

Смежные вопросы