<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[expected primary-expression before &amp;quot;int&amp;quot; ??]]></title><description><![CDATA[<p>Hallo!<br />
Jetzt hab ich über eine Stunde versucht, den Fehler raus zu kriegen.<br />
Problem: Im main()-Part stimmt auf Zeile 18 was nicht (siehe Bemerkung).</p>
<p>Ich verstehe nicht, warum. Ich habe die Funktion ordentlich deklariert, aufgerufen und definiert.</p>
<p>Warum erscheint immer die Meldung &quot;18 \main.cpp expected primary-expression before &quot;int&quot; &quot;?</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &quot;function.h&quot;

using namespace std;

int main(int argc, char *argv[])
{

int jahr[12] = {31,28,31,30,31,30,31,31,30,31,30,31} ;
int monat, tag;

    cin &gt;&gt; tag  ; 
    cin &gt;&gt; monat ;

        int function1(int tag, int monat, int jahr[]);
        int result1 = function1(int tag, int monat, int jahr[]); //Was meckert er hier rum?????????

            cout &lt;&lt; &quot;Dieser Tag ist der &quot; &lt;&lt; function1 &lt;&lt; &quot; im Jahr. &quot;;
            cout &lt;&lt; &quot;\n \n&quot;;

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p><a href="//function.h">//function.h</a></p>
<pre><code>#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

         int i,j=0;
         int function1(int tag, int monat, int jahr[])
            {
                for (i=0;i&lt;monat;i++)
                    {j += jahr[monat]; cout &lt;&lt; j;};

                return j+tag ;
                }
</code></pre>
<p>Das kann doch nicht so schwer sein...!<br />
Wer kann mir hier weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293746/expected-primary-expression-before-quot-int-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 05:43:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293746.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Oct 2011 00:28:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to expected primary-expression before &amp;quot;int&amp;quot; ?? on Mon, 10 Oct 2011 00:28:50 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Jetzt hab ich über eine Stunde versucht, den Fehler raus zu kriegen.<br />
Problem: Im main()-Part stimmt auf Zeile 18 was nicht (siehe Bemerkung).</p>
<p>Ich verstehe nicht, warum. Ich habe die Funktion ordentlich deklariert, aufgerufen und definiert.</p>
<p>Warum erscheint immer die Meldung &quot;18 \main.cpp expected primary-expression before &quot;int&quot; &quot;?</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &quot;function.h&quot;

using namespace std;

int main(int argc, char *argv[])
{

int jahr[12] = {31,28,31,30,31,30,31,31,30,31,30,31} ;
int monat, tag;

    cin &gt;&gt; tag  ; 
    cin &gt;&gt; monat ;

        int function1(int tag, int monat, int jahr[]);
        int result1 = function1(int tag, int monat, int jahr[]); //Was meckert er hier rum?????????

            cout &lt;&lt; &quot;Dieser Tag ist der &quot; &lt;&lt; function1 &lt;&lt; &quot; im Jahr. &quot;;
            cout &lt;&lt; &quot;\n \n&quot;;

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p><a href="//function.h">//function.h</a></p>
<pre><code>#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

         int i,j=0;
         int function1(int tag, int monat, int jahr[])
            {
                for (i=0;i&lt;monat;i++)
                    {j += jahr[monat]; cout &lt;&lt; j;};

                return j+tag ;
                }
</code></pre>
<p>Das kann doch nicht so schwer sein...!<br />
Wer kann mir hier weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2129393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2129393</guid><dc:creator><![CDATA[Onkel-Philipp]]></dc:creator><pubDate>Mon, 10 Oct 2011 00:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to expected primary-expression before &amp;quot;int&amp;quot; ?? on Mon, 10 Oct 2011 00:41:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int result1 = function1(int tag, int monat, int jahr[]); //Was meckert er hier rum?????????
</code></pre>
<p>Du hast zuviel copy &amp; past angewendet. Der Aufruf erfolgt ohne die Typangaben.</p>
<pre><code class="language-cpp">int result1 = function1(tag, monat, jahr);
</code></pre>
<p>Wenn du die Definition der Funktion mit einer Headerdatei einbindest (wie es bei dir geschieht) dann steht die vollständige Definition der Funktion bereits im Quelltext und du brauchst sie nicht nochmal du deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2129396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2129396</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Mon, 10 Oct 2011 00:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to expected primary-expression before &amp;quot;int&amp;quot; ?? on Mon, 10 Oct 2011 10:29:26 GMT]]></title><description><![CDATA[<p>Onkel-Philipp schrieb:</p>
<blockquote>
<p>Ich verstehe nicht, warum. Ich habe die Funktion ordentlich deklariert, aufgerufen und definiert.</p>
</blockquote>
<p>Wenn dem so wäre, würde es ja funktionieren.</p>
<p>Onkel-Philipp schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &quot;function.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
    …
    int function1(int tag, int monat, int jahr[]);
    int result1 = function1(int tag, int monat, int jahr[]);
    …
}
</code></pre>
</blockquote>
<p>Du hast hier nochmal eine Deklaration von function1 stehen. Wozu? Gerade innerhalb eines Blocks ({..}) ist das sehr unüblich. Du brauchst sie hier auch nicht, da schon eine Deklaration in der Headerdatei steht, die Du per #include einfügst.</p>
<p>So ruft man keine Funktionen auf. Du sagst ja auch nicht sin(double 3.14) oder sqrt(double 4.0), sondern sin(3.14) und sqrt(4.0). Der Typ hat da nichts zu suchen. Die Typen der Variablen tag, monat und jahr hast Du ja schon weiter oben festgelegt. Die Namen Deiner Variablen müssen übrigens nicht mit denen der Funktionsparameter übereinstimmen.</p>
<p>Onkel-Philipp schrieb:</p>
<blockquote>
<p><a href="//function.h">//function.h</a></p>
<pre><code>#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;
</code></pre>
</blockquote>
<p>Mit einer using-Direktive in einer Header-Datei verschmutzt Du überall dort den globalen Namensraum, wo diese Header-Datei eingebunden wird. Das macht man nicht.</p>
<p>Onkel-Philipp schrieb:</p>
<blockquote>
<pre><code>int i,j=0;
</code></pre>
</blockquote>
<p>Globale Variablen sind zu vermeiden. Diese Variablen gehören <em>in</em> die Funktion.</p>
<blockquote>
<pre><code>int function1(int tag, int monat, int jahr[])
            {
                for (i=0;i&lt;monat;i++)
                    {j += jahr[monat]; cout &lt;&lt; j;};
                
                return j+tag ;
                }
</code></pre>
</blockquote>
<p>Die Verwendung von monat als Index bei jahr[monat] ist bestimmt falsch. Und j wird nirgendswo wieder auf 0 gesetzt. Da Du j global definiert hast, lebt die Variable es bis zum Programmende und der Zustand bleibt zwischen den Funktionsaufrufen erhalten. Wenn Du die Funktion ein zweites Mal aufrufst, wird j wahrscheinlich nicht mehr anfangs 0 sein.</p>
<p>Ich möchte mal mit positivem Beispiel voran gehen:</p>
<pre><code class="language-cpp">// datum.hpp
#ifndef DATUM_HPP_INCLUDED
#define DATUM_HPP_INCLUDED

/// @param jahr - vierstellige Jahreszahl
/// @param monat - 1 bis 12
/// @return gibt an, wieviele Tage der gegebene Monat hat
int tagepromonat(int jahr, int monat);

/// @param jahr - vierstellige Jahreszahl
/// @param monat - 1 bis 12
/// @param tag - 1 bis 31
/// @return gibt an, der wievielte Tag im Jahr das entsprechende Datum darstellt
int tagdesjahres(int jahr, int monat, int tag);

#endif
</code></pre>
<pre><code class="language-cpp">// datum.cpp
#include &lt;cassert&gt;
#include &quot;datum.hpp&quot;

namespace { // anonymer Namensraum fuer Modul-interne Dinge

  bool schaltjahr(int jahr)
  {
    …
  }

  // Tabelle für die Summe der Tage der vergangenen Monate
  const int mtage_kumulativ[] = {
    0,        // nix
    31,       // Januar
    31+28,    // Januar und Februar
    31+28+31, // ...
    31+28+31+30,
    31+28+31+30+31,
    31+28+31+30+31+30,
    31+28+31+30+31+30+31,
    31+28+31+30+31+30+31+31,
    31+28+31+30+31+30+31+31+30,
    31+28+31+30+31+30+31+31+30+31,
    31+28+31+30+31+30+31+31+30+31+30,
    365 // Januar+...+Dezember
  };

} // Ende anonymer Namensraum

int tagdesjahres(int jahr, int monat, int tag)
{
  assert(1&lt;=monat &amp;&amp; monat&lt;=12);
  return tag + mtage_kumulativ[monat-1] + (monat&gt;2 &amp;&amp; schaltjahr(jahr));
}

int tagepromonat(int jahr, int monat)
{
  assert(1&lt;=monat &amp;&amp; monat&lt;=12);
  const int ohne_schaltjahr = mtage_kumulativ[monat]-mtage_kumulativ[monat-1];
  return ohne_schaltjahr + (monat==2 &amp;&amp; schaltjahr(jahr));
}
</code></pre>
<p>Was daran besser ist:<br />
- Funktion verwendet keine global veränderlichen Variablen<br />
- Funktion hat einen gescheiten Namen<br />
- Funktion bekommt kein Array mehr übergeben, sondern nur noch ein Datum<br />
- Funktion kann mit Schaltjahren umgehen<br />
- Code ist dokumentiert (Kommentare + assert)</p>
<p>Darüber hinaus sieht man:<br />
- Include-Guard im Header (wichtig!)<br />
- Verwendung eines anonymen Namensraum für die &quot;Modul-private&quot; Funktion <code>schaltjahr</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2129434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2129434</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 10 Oct 2011 10:29:26 GMT</pubDate></item></channel></rss>